Quelles sont les causes d'un copyr / coller dans le terminal pour exécuter parfois la command?

Lorsque vous collez une command dans le terminal, il exécute parfois automatiquement la command (comme si la touche "Entrée" était enfoncée), parfois pas.

J'utilise Linux depuis des lustres, j'ai collé des milliers de commands dans différentes consoles sur de nombreuses dissortingbutions, et je n'arrive toujours pas à savoir si la command que je vais coller sera exécutée automatiquement ou non.

Qu'est-ce qui triggers ce comportement?

C'est le caractère de return dans le text que vous copyz qui triggers l'exécution automatique.

Prenons un exemple différent, copyz ces lignes à la fois et collez-les dans votre terminal:

 echo "Hello"; echo "World"; 

Si vous regardez dans votre terminal, vous ne verrez pas ceci:

 $ echo "Hello"; echo "World"; 

Vous verrez ceci (il peut aussi y avoir une ligne disant World ):

 $ echo "Hello"; Hello $ echo "World"; 

Au lieu d'attendre que toute l'input soit collée, la première ligne s'exécute (et pour la même raison, la seconde ligne peut ou ne peut pas aussi bien le faire). C'est parce qu'il y a un caractère RETURN entre les deux lignes.

Lorsque vous appuyez sur la touche ENTER de votre keyboard, tout ce que vous faites est d'envoyer le caractère avec la valeur ASCII de 13 . Ce caractère est détecté immédiatement par votre terminal et sait qu'il a des instructions spéciales pour exécuter ce que vous avez tapé jusqu'à présent.

Lorsqu'il est stocké sur votre ordinateur ou imprimé sur votre écran, le caractère RETURN est comme toute autre lettre de l'alphabet, du numéro ou du symbole. Ce caractère peut être supprimé avec return arrière ou copié dans le presse-papiers comme n'importe quel autre caractère normal.

La seule différence est que, lorsque votre browser voit le personnage, il sait qu'au lieu d' imprimer un personnage visible, il devrait le traiter différemment et qu'il a des instructions spéciales pour déplacer le text suivant vers la ligne suivante. Pour cette raison, le caractère RETURN et le caractère SPACE (ascii 32 ), ainsi que quelques autres caractères rarement utilisés, sont appelés "caractères non imprimables".

Parfois, lorsque vous copyz du text à partir d'un site Web, il est difficile de copyr uniquement le text et non le return à la fin (ce qui est souvent compliqué par le style de la page).


Expérimentez le time!

Vous findez ci-dessous deux commands qui illustreront le problème et que vous pourrez «pratiquer». Démarrez votre slider juste avant l' echo et faites glisser jusqu'à ce que la surbrillance soit juste avant la flèche:

 echo "Wait for my signal...";<- End cursor here right after the semicolon 

Et maintenant, essayez la deuxième command. Démarrez votre slider juste avant l' echo et faites glisser vers le bas jusqu'à ce que le slider se trouve sur la deuxième ligne, mais est juste en face de la flèche <- . Copiez-le, puis collez-le dans votre terminal:

 echo 'Go go go!'; <- End cursor here right before the arrow 

En fonction de votre browser, il peut même ne pas être visible que le text que vous avez sélectionné est passé sur deux lignes. Mais lorsque vous le collez dans le terminal, vous constaterez qu'il exécute la ligne, car il a trouvé un caractère RETURN dans le text copié.

Lorsque vous select du text, si vous incluez la nouvelle ligne (invisible) à la fin d'une ligne, elle sera dans le text collé. Cela est cohérent pour tous les émulateurs de terminal que je connais. La nouvelle ligne fait ce que vous appelez "valider".

Sur certains systèmes (tels que ceux utilisant des terminaux synchrones comme IBM 3270), la touche Entrée «validerait» l'écran en copiant toutes les modifications apscopes à l'hôte.

Les autres réponses ont bien répondu à la question, mais je pensais que je partagerais également une solution pour éviter que cela se produise accidentellement si vous utilisez PuTTY sous Windows – voir https://serverfault.com/questions/731022/prevent-accidental -execution-de-commands-dans-linux-si-coller-text-contenant-un pour plus de détails.

Qu'est-ce qui triggers ce comportement?

Le caractère de nouvelle ligne.