Lorsque vous collez une commande dans le terminal, il exécutera parfois automatiquement la commande (comme si la touche "Entrée" était enfoncée), parfois non.
J'utilise Linux depuis des lustres, j'ai collé des milliers de commandes dans diverses consoles sur de nombreuses distributions, et je ne suis toujours pas en mesure de dire si la commande que je vais coller sera exécutée automatiquement ou non.
Qu'est-ce qui déclenche ce comportement?
{
(w / espace) avant de coller, puis terminez par}
. Cela n'a aucun effet sur le fonctionnement des commandes collées, mais empêche le shell de l'exécuter jusqu'à ce que vous fermiez le bloc. Décrit ici [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]Réponses:
C'est le caractère de retour dans le texte que vous copiez qui déclenche l'exécution automatique.
Prenons un autre exemple, copions ces lignes d'un coup et collez-les dans votre terminal:
Si vous regardez dans votre terminal, vous ne verrez pas ceci:
Vous verrez ceci (il peut aussi y avoir une ligne disant
World
):Au lieu d'attendre que toutes les entrées soient collées, la première ligne s'exécute (et pour la même raison, la deuxième ligne peut également le faire). C'est parce qu'il y a un
RETURN
caractère entre les deux lignes.Lorsque vous appuyez sur la
ENTER
touche de votre clavier, tout ce que vous faites est d'envoyer le caractère avec la valeur ASCII de13
. Ce caractère est immédiatement détecté par votre terminal et sait qu'il dispose d'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
RETURN
caractère est comme n'importe quelle autre lettre de l'alphabet, du chiffre ou du symbole. Ce caractère peut être supprimé avec un retour arrière, ou copié dans le presse-papiers comme n'importe quel autre caractère normal.La seule différence est que lorsque votre navigateur voit le caractère, il sait qu'au lieu d' imprimer un caractère visible, il doit le traiter différemment et dispose d'instructions spéciales pour déplacer l'ensemble de texte suivant vers la ligne suivante. Le
RETURN
caractère et leSPACE
caractère (ascii32
), ainsi que quelques autres caractères rarement utilisés, sont appelés "caractères non imprimables" pour cette raison.Parfois, lorsque vous copiez du texte à partir d'un site Web, il est difficile de copier uniquement le texte et non le retour à la fin (et cela est souvent rendu plus difficile par le style de la page).
Expérimentez le temps!
Ci-dessous, vous trouverez deux commandes qui illustreront le problème et sur lesquelles vous pourrez vous "entraîner". Commencez votre curseur juste avant
echo
et faites glisser jusqu'à ce que la surbrillance soit juste avant la flèche:Et maintenant, essayez la deuxième commande. Commencez votre curseur juste avant
echo
et faites glisser vers le bas jusqu'à ce que le curseur se trouve sur la deuxième ligne, mais juste devant la<-
flèche. Copiez-le, puis collez-le dans votre terminal:En fonction de votre navigateur, il peut même ne pas être visible que le texte que vous avez sélectionné soit sur deux lignes. Mais lorsque vous le collez dans le terminal, vous constaterez qu'il exécute la ligne, car il a trouvé un
RETURN
caractère dans le texte copié.la source
Lorsque vous sélectionnez du texte, s'il vous arrive d'inclure la nouvelle ligne (invisible) à la fin d'une ligne, elle sera dans le texte collé. Cela est cohérent dans tous les émulateurs de terminaux que je connais. La nouvelle ligne fait ce que vous appelez "valider".
Sur certains systèmes (tels que ceux utilisant des terminaux synchrones comme l'IBM 3270), la Enterclé "validerait" l'écran en copiant toutes les modifications sur l'hôte.
la source
Les autres réponses ont bien répondu à la question, mais je pensais partager une solution pour éviter que cela ne se produise accidentellement si vous utilisez PuTTY sur Windows - voir /server/731022/prevent-accidental -execution-of-commandes-in-linux-if-pasting-text-contains-one pour plus de détails.
la source
Le caractère de nouvelle ligne.
la source