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.

11voto

lamas Points 2252

Utilisez pâte entre crochets .

Le collage entre crochets est une fonctionnalité par laquelle le terminal indique à l'interpréteur de commandes que vous avez collé quelque chose au lieu de le taper, de sorte que l'interpréteur de commandes ne peut pas exécuter la commande tant que vous n'avez pas appuyé sur Entrée.

Terminal.app prend en charge cette fonction, mais tous les terminaux ne le font pas.

De même, tous les shells ne le supportent pas non plus. La version de bash fournie avec OS X ne prend pas en charge le collage entre crochets. (au moment de la rédaction de cet article, il s'agit de la version 3.2.57).

Cependant, zsh prend en charge le collage entre crochets :

zsh-bracketed-paste

Zsh est en grande partie compatible avec bash (même scripts fonctionneront probablement, à moins que vous n'utilisiez une sorte de fonctionnalité vraiment obscure), et meilleur à bien des égards - par exemple, il dispose même de l'édition de commandes multi-lignes !

zsh-multiline-command

0 votes

Comment activer le collage entre crochets ?

2 votes

Il est activé par défaut si vous utilisez zsh. Essayez de coller une ligne simple ! Il devrait être mis en surbrillance inversée comme dans ma première capture d'écran, et si vous appuyez une fois sur la touche Delete, cela devrait supprimer l'ensemble du texte.

1 votes

En fait, je l'ai trouvé par accident, puis je me suis demandé pourquoi il n'était pas dans bash. Il s'avère que le bash par défaut est vraiment vieux. ( )

10voto

nohillside Points 82672

En supposant que vous utilisez bash : Si vous activez les raccourcis emacs avec set -o emacs vous pouvez également utiliser Emacs pour éditer la ligne de commande :

  • Type Ctrl-XCtrl-E à l'invite pour lancer Emacs
  • Coller et modifier le contenu du presse-papiers dans le tampon d'Emacs
  • Utilisez Ctrl-XCtrl-C pour quitter Emacs et exécuter automatiquement la ou les commandes.

4voto

Ged Byrne Points 481

La solution la plus simple est probablement d'utiliser un éditeur de texte comme tampon où vous pouvez revérifier le contenu, puis de copier de l'éditeur de texte vers Terminal. Si vous utilisez TextEdit pour cela, vous voudrez probablement vous assurer qu'il est en mode texte brut ( Format menu Faire du texte en clair ; T) pour éviter les problèmes tels que les liens collés en tant que liens et non en tant qu'URL.

L'autre chose à noter est que Bash tentera d'exécuter tout ce qui précède un caractère de nouvelle ligne, donc si vous copiez un bloc de texte, vous pouvez vous assurer que votre sélection s'arrête après le dernier caractère, plutôt que d'inclure la fin de la ligne.

Tu veux ça : selection without newline

Pas ça : selection with newline

Bien sûr, si vous copiez des éléments avec des retours à la ligne dans le texte ( c'est-à-dire plusieurs paragraphes), vous devrez alors modifier manuellement la sélection.

2 votes

Le problème, c'est que je colle des choses dans le terminal plusieurs centaines de fois par jour. utiliser un éditeur de texte au milieu serait une vraie plaie.

0 votes

Un attaquant peut intégrer des retours chariot dans le texte sans qu'ils soient visibles à l'écran. Votre exemple de sélection de texte n'offre donc pas nécessairement de protection.

3voto

pageman Points 1522

Si vous utilisez une version récente de Bash ( v4.4 (vous devrez peut-être l'installer via homebrew) :

  1. Ajouter set enable-bracketed-paste on à votre ~/.inputrc ( source )
  2. Activez l'option "Coller les nouvelles lignes en tant que retours de chariot" dans le profil de votre terminal. picture_of_terminal_profile_tab

1voto

Scott Points 3192

Je comprends ça aussi !

Ma solution consiste à coller en utilisant Barre de lancement Le gestionnaire de presse-papiers de l'entreprise, avec la touche de raccourci Cmd+\ . Cela fait apparaître une liste de coupures récentes, ce qui me permet de prévisualiser le résultat avant de le coller : si je ne vois pas le contenu que j'attends, j'appuie sur Echap avant de relâcher Cmd. Je peux également utiliser une touche fléchée pour "entrer" dans un découpage de texte, ce qui me permet de voir le contenu ligne par ligne.

Je crois que la plupart des lanceurs le font - Alfred (addon powerpack) et Quicksilver (gratuit), par exemple.

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