25 votes

Existe-t-il un moyen de sécuriser le collage dans le Terminal ?

Je colle des noms de fichiers/etc dans le Terminal tout le temps, et parfois le contenu du presse-papiers n'est pas ce que j'attends.

Il en résulte souvent plusieurs centaines de lignes de texte (par exemple, du code source) collées dans l'invite de commande, déclenchant Dieu sait quelle horreur.

Y a-t-il un moyen d'empêcher bash d'exécuter aveuglément tout ce que je colle ? J'aimerais qu'il colle juste le texte, et me laisse décider après si je veux l'exécuter.

0 votes

Il ne m'arrive pas souvent de coller accidentellement la mauvaise chose dans Terminal mais bon sang, c'est effrayant quand ça arrive et que plusieurs lignes ont été exécutées avant même que vos doigts n'aient quitté les touches Command-V. La réponse de SilverWolf (passer de bash à zsh) est la solution la plus simple que j'ai vue.

0 votes

@Kal si vous changez de shell - essayez le poisson "Enfin, un shell de ligne de commande pour les années 90". Le collage multi-lignes correctement géré n'est qu'une des nombreuses fonctionnalités "années 90" de fish... il vous permet de coller plusieurs lignes, mais vous oblige à appuyer sur retour avant qu'il n'exécute le lot de commandes. Ou vous pouvez faire ctrl-c.

1voto

Sigsegv Points 716

Vous devriez peut-être chercher un gestionnaire de presse-papiers. J'en utilise un gratuit et léger appelé Jumpcut . Il me permet de conserver plusieurs presse-papiers et de voir ce qui y est stocké avant d'en coller le contenu, le tout à partir du clavier.

Il existe de nombreux gestionnaires de presse-papiers, alors si Jumpcut ne vous convient pas, peut-être qu'un autre répondra mieux à vos besoins.

1voto

keif Points 500

Sous Preferences -> Profiles -> Basic -> Advanced , cochez "Coller les nouvelles lignes comme des retours de chariot". (Basic est le nom d'un profil. Si vous utilisez un autre profil, vous devez choisir celui-ci à la place).

Sur un peu de shells (zsh et bash fonctionnent pour moi, tcsh non) cela vous permettra de modifier ou d'interrompre (via Ctrl-C) ce qui est collé avant qu'une partie de celui-ci ne soit transmise au shell.

Vous devrez peut-être créer une nouvelle fenêtre de terminal pour que la préférence commence à fonctionner.

J'utilise cette fonctionnalité tout le temps, non seulement pour coller et éditer des commandes complexes, mais aussi pour afficher du texte en colonnes et parfois pour sélectionner et copier des sous-rectangles en les faisant glisser avec la touche option.

0 votes

Je viens d'apprendre que TextEdit fait aussi la sélection rectangulaire.

0 votes

Cela ne fonctionne pas pour moi dans bash. Les lignes multiples sont exécutées au moment où elles sont collées, que l'option "Coller les nouvelles lignes comme retours chariot" soit cochée ou non.

0voto

Gerry Points 14225

Vous pourriez mettre ce petit Bash script quelque part dans vos PATH :

#!/bin/bash

read -p "Are you sure you wish to execute \`$(pbpaste)\`? (Y/n) "    
[[ $REPLY =~ ^[Yy]?$  ]] && pbpaste | bash

Si je mets ces contenus dans /usr/local/pbexecute par exemple et le rendre exécutable, je pourrais en toute sécurité exécuter pbexecute à partir de la ligne de commande, ce qui me demanderait de confirmer avant d'exécuter le contenu du presse-papiers.

Une autre approche consiste à lancer un éditeur de texte avec le contenu du presse-papiers depuis le shell et à exécuter automatiquement le contenu édité en quittant. Par exemple :

#!/bin/bash

PBTEMP=$(mktemp -t pbtemp)
pbpaste > $PBTEMP
nano -t $PBTEMP
source $PBTEMP
rm $PBTEMP

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X