Necesito pegar un código bash de varias líneas en la terminal, pero siempre que lo hago, cada línea se ejecuta como un comando separado tan pronto como se pega.
Respuestas:
Estoy realmente sorprendido de que esta respuesta no se ofrezca aquí, estaba buscando una solución a esta pregunta y creo que este es el enfoque más fácil y más flexible / indulgente ...
Si desea pegar varias líneas de un sitio web / editor de texto / etc., en bash, independientemente de si se trata de comandos por línea o una función o un script completo ... simplemente comience con ay (
termine con )
ay Enter, como en el siguiente ejemplo:
Si tuviera la siguiente mancha
function hello {
echo Hello!
}
hello
Puede pegar y verificar en una terminal usando bash de la siguiente manera:
Empezando con (
Pegar su texto y presionar Enter (para hacerlo bonito) ... o no
Terminando con a )
y presionando Enter
Ejemplo:
imac:~ home$ ( function hello {
> echo Hello!
> }
> hello
> )
Hello!
imac:~ home$
El texto pegado continúa automáticamente con un prefijo >
para cada línea. He probado con múltiples líneas con comandos por línea, funciones y scripts completos. ¡Espero que esto ayude a otros a ahorrar tiempo!
Si presiona el C-x C-e
comando que abrirá su editor predeterminado que definió .bashrc
, después de eso, puede usar todas las funciones poderosas de su editor. Cuando guarde y salga, las líneas esperarán su entrada.
Si desea definir su editor, simplemente escriba para Ex. EDITOR=emacs -nw
o EDITOR=vi
dentro de~/.bashrc
emacs
y vi
hacer), y al guardar y salir los comandos se ejecutan instantáneamente .
Además de barra inversa, si una línea termina con |
o &&
o ||
, se continuará en la línea siguiente.
Agrega paréntesis alrededor de las líneas. Ejemplo:
$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)
(
, los frenos {
también funcionarían igual en el ejemplo anterior
Otra posibilidad:
bash << EOF
echo "Hello"
echo "World"
EOF
iTerm maneja el comando de múltiples líneas perfectamente, guarda el comando de múltiples líneas como un solo comando, luego podemos usar Cmd
+ Shift
+ ;
para navegar por el historial.
Consulte más consejos sobre iTerm en Trabajar eficazmente con iTerm
Tratar
out=$(cat)
Luego pegue sus líneas y presione Ctrl-D (inserte el carácter EOF). Toda la entrada hasta Ctrl-D será redirigida a la salida estándar del gato.
$ out=$(cat) && eval "$out"
. presione enter después de la última línea y luego CTRL + D como se sugirió anteriormente.