Detener la ejecución automática del terminal al pegar un comando

Detener la ejecución automática del terminal al pegar un comando

Bien, esta es una característica un poco molesta porque algo sucede y otras veces no, muy extraño.

Pego un comando en la terminal con el fin de modificar sus argumentos, ya vecesse ejecuta en el momento en que lo pego. A veces no es así.

Esto va desde vergonzoso (publicar comentarios sin sentido en un IRC) hasta peligroso.

¿Cómo puedo desactivar esta función para siempre? Nunca, nunca, nunca quiero que el terminal se ejecute automáticamente cuando lo pego.

Respuesta1

No hay ejecución automática. Probablemente también estés copiando un salto de línea (o más) después del comando.

Si pegas un comandoconuna pausa, el shell (línea de comando) cree que usted mismo presionó el botón de pausa (Entrar, Regresar).


Esta respuesta solo explica por qué OP tiene el comportamiento no deseado. Sin embargo, enOtra respuesta, hay una solución real.al problema del OP.

Respuesta2

UnorealLa solución es abrir el modo de edición ctrl-x ctrl-ey luego pegar de forma segura su portapapeles en el editor de su elección (comúnmente emacs o vim). Una vez que haya terminado de editar el comando, guarde y salga y se ejecutará en la línea de comando. Este es un buen hábito para comandos largos o complejos, especialmente cuando se pegan hashes de confirmación en comandos git, y puede ayudarlo a evitar algunos resultados aterradores a largo plazo.

El editor se puede cambiar configurando las variables VISUAL y EDITOR (éstas tienen diferentes significados, consulteaquí).

Respuesta3

Como han mencionado otros, el problema ocurre cuando el texto pegado contiene caracteres de nueva línea. Con ese conocimiento, su pregunta es más o menos la misma queeste en falla del servidor. Sitio diferente, así que repetiré mi respuesta aquí...

Lo que quieres se llama'pasta entre corchetes', una característica que está disponible en algunos shells.

Suponiendo que estás usando una versión reciente del shell bash, puedes activarla para la sesión actual de esta manera:

bind 'set enable-bracketed-paste on'

Ahora pruébalo pegando varias líneas:

echo Hello world
echo Again, I say, hello!

El shell reconoce que el texto fue pegado (no escrito) y espera con un mensaje de confirmación. Si todo parece seguro para continuar, presione la tecla Enter. Si no, presiona Control-C para cancelar.

Si desea habilitar el pegado entre corchetes para cada nueva sesión, agregue el comando a su archivo .inputrc:

cd ~
echo "set enable-bracketed-paste" >> .inputrc

Otra opción es cambiar deintentoazsh, donde el pegado entre corchetes está habilitado de forma predeterminada. Para reemplazar su shell actual con un shell zsh:

exec zsh

Con zsh, el texto pegado se resalta, lo cual es bueno. Nuevamente, presione Enter para ejecutar el/los comando/s o Control-C para cancelar.

Si te gusta zsh y deseas convertirlo en el shell predeterminado:

chsh -s /bin/zsh

Respuesta4

Utilizo este alias para pegar y hacer que mi comando NO se ejecute

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

información relacionada