Cuando pega algún comando en la terminal, a veces se ejecutará automáticamente el comando (al igual que si se presiona la tecla "Enter"), a veces no.
He estado usando Linux durante años, pegué miles de comandos en varias consolas en muchas distribuciones, y todavía no puedo decir si el comando que estoy a punto de pegar se ejecutará automáticamente o no.
¿Qué desencadena este comportamiento?
{
(w / space) antes de pegar, luego termine con}
. No tiene ningún efecto sobre el funcionamiento de los comandos pegados, pero evita que Shell lo ejecute hasta que cierre el bloque. Descrito aquí [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]Respuestas:
Es el carácter de retorno en el texto que está copiando lo que desencadena la ejecución automática.
Tomemos un ejemplo diferente, copie todas estas líneas de una vez y péguelas en su terminal:
Si mira en su terminal, no verá esto:
Verá esto (también puede haber una línea que diga
World
):En lugar de esperar a que se pegue toda la entrada, se ejecuta la primera línea (y por la misma razón, la segunda línea puede o no hacerlo también). Esto se debe a que hay un
RETURN
carácter entre las dos líneas.Cuando presiona la
ENTER
tecla en su teclado, todo lo que está haciendo es enviar el carácter con el valor ASCII de13
. Su terminal detecta ese carácter inmediatamente y sabe que tiene instrucciones especiales para ejecutar lo que ha escrito hasta ahora.Cuando se almacena en su computadora o se imprime en su pantalla, el
RETURN
carácter es como cualquier otra letra del alfabeto, número o símbolo. Este personaje puede eliminarse con retroceso o copiarse al portapapeles como cualquier otro personaje normal.La única diferencia es que, cuando su navegador ve el carácter, sabe que en lugar de imprimir un carácter visible, debe tratarlo de manera diferente y tiene instrucciones especiales para mover el siguiente conjunto de texto a la siguiente línea. El
RETURN
carácter y elSPACE
carácter (ascii32
), junto con algunos otros caracteres rara vez utilizados, se conocen como "caracteres no impresos" por este motivo.A veces, cuando copia texto de un sitio web, es difícil copiar solo el texto y no la devolución al final (y el estilo de la página a menudo lo dificulta).
¡Experimente el tiempo!
A continuación encontrará dos comandos que ilustrarán el problema y en los que puede "practicar". Inicie el cursor justo antes
echo
y arrastre hasta que el resaltado esté justo antes de la flecha:Y ahora prueba el segundo comando. Inicie el cursor justo antes
echo
y arrastre hacia abajo hasta que el cursor esté en la segunda línea, pero esté justo delante de la<-
flecha. Cópielo y luego péguelo en su terminal:Dependiendo de su navegador, es posible que ni siquiera sea visible que el texto que seleccionó haya pasado por dos líneas. Pero cuando lo pegue en el terminal, encontrará que ejecuta la línea, porque encontró un
RETURN
carácter en el texto copiado.fuente
Cuando selecciona texto, si incluye la nueva línea (invisible) al final de una línea, estará en el texto 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 utilizan terminales sincrónicos como el IBM 3270), la Enterclave "validaría" la pantalla copiando todos los cambios en el host.
fuente
Las otras respuestas han respondido bien a la pregunta, pero pensé que también compartiría una solución para evitar que esto suceda accidentalmente si está utilizando PuTTY en Windows: consulte /server/731022/prevent-accidental -ejecución-de-comandos-en-linux-si-pegando-texto-que contiene-uno para más detalles.
fuente
El personaje de nueva línea.
fuente