¿Qué causa que un terminal de copyr / pegar ejecute a veces el command?

Cuando pega algún command en la terminal, algunas veces ejecutará el command automáticamente (como si se hubiera presionado la tecla "Enter"), a veces no.

He usado Linux durante años, pegado miles de commands en varias consoles en muchas distribuciones, y todavía no puedo decir si el command que voy a pegar se ejecutará automáticamente o no.

¿Qué desencadena este comportamiento?

Es el carácter de retorno en el text que está copyndo lo que activa la ejecución automática.

Tomemos un ejemplo diferente, copie estas líneas todas a la vez y péguelas en su terminal:

 echo "Hello"; echo "World"; 

Si miras en tu terminal, no verás esto:

 $ echo "Hello"; echo "World"; 

Verás esto (también puede haber una línea que diga World ):

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

En lugar de esperar a que se pegue toda la input, se ejecuta la primera línea (y por la misma razón, la segunda línea también puede o no hacerlo). Esto se debe a que hay un carácter RETURN entre las dos líneas.

Cuando presiona la tecla ENTER en su keyboard, todo lo que está haciendo es enviar el carácter con el valor ASCII de 13 . Ese carácter es detectado inmediatamente por su terminal, y sabe que tiene instrucciones especiales para ejecutar lo que ha tipeado hasta ahora.

Cuando se almacena en su computadora o se imprime en su pantalla, el carácter RETURN es como cualquier otra letra del alfabeto, número o símbolo. Este personaje se puede eliminar con retroceso o copyrse en el portapapeles al igual que cualquier otro personaje regular.

La única diferencia es que, cuando el browser ve el personaje, sabe que, en lugar de imprimir un carácter visible, debe tratarlo de manera diferente y tiene instrucciones especiales para mover el siguiente set de text a la siguiente línea. El carácter RETURN y el carácter SPACE (ascii 32 ), junto con algunos otros caracteres poco utilizados, se conocen como "caracteres no impresos" por este motivo.

Algunas veces, cuando copys un text de un website, es difícil copyr solo el text y no el resultado al final (y con frecuencia el layout de la página lo hace más difícil).


Tiempo de experimento!

A continuación encontrará dos commands que ilustrarán el problema y en los que puede "practicar". Comience su cursor justo antes del echo y arrastre hasta que el resaltado esté justo antes de la flecha:

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

Y ahora testing el segundo command. Comience su cursor justo antes del echo y arrastre hacia abajo hasta que el cursor esté en la segunda línea, pero está justo en frente de la flecha <- . Cópialo y pégalo en tu terminal:

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

Dependiendo de su browser, puede que ni siquiera sea visible que el text seleccionado haya pasado por dos líneas. Pero cuando lo pegue en la terminal, encontrará que ejecuta la línea, porque encontró un carácter RETURN en el text copydo.

Cuando selecciona text, si incluye la línea nueva (invisible) al final de una línea, estará en el text pegado. Eso es consistente en todos los emuladores de terminal que conozco. La nueva línea hace lo que está llamando "validar".

En algunos sistemas (como los que usan terminales síncronos como el IBM 3270), la tecla Intro "validaría" la pantalla al copyr todos los cambios en el host.

Las otras respuestas han respondido bien a la pregunta, pero pensé que también compartiría una solución para evitar que esto ocurra accidentalmente si está usando PuTTY en Windows – consulte https://serverfault.com/questions/731022/prevent-accidental -execution-of-commands-in-linux-if-pasting-text-containing-one para más detalles.

¿Qué desencadena este comportamiento?

El carácter de nueva línea.