¿Cómo pego códigos bash de varias líneas en la terminal y los ejecuto todos a la vez?


104

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:


107

Intente poner \al final de cada línea antes de copiarlo.


19
Nota: ¡los espacios finales lo romperán!
Max Reeder

55

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:

  1. Empezando con (

  2. Pegar su texto y presionar Enter (para hacerlo bonito) ... o no

  3. 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!


4
método más fácil OMI
Hobroker

1
@Toolkit por las cosas simples que funcionará como usted la describe, pero la solución que yo he ofrecido trabajará para situaciones más complejas (saltos de línea, múltiples funciones, scripts enteros, etc.)
TryTryAgain

1
Esto ejecuta los comandos pegados en una subcapa, por lo que a menudo no hace lo que desea. Puede usar llaves en lugar de paréntesis para forzar su ejecución en el shell actual; pero en realidad, tampoco lo hagas. El caparazón puede hacer frente.
tripleee

33

Si presiona el C-x C-ecomando 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 -nwo EDITOR=videntro de~/.bashrc


2
La técnica es útil, pero tenga en cuenta que el editor debe ejecutarse sincrónicamente (como emacsy vihacer), y al guardar y salir los comandos se ejecutan instantáneamente .
mklement0

16

Además de barra inversa, si una línea termina con |o &&o ||, se continuará en la línea siguiente.


13

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
)

2
Tenga en cuenta que, al igual que la parántesis (, los frenos {también funcionarían igual en el ejemplo anterior
GypsyCosmonaut



4

Para evitar una larga línea de comandos en un archivo de texto, mantengo mis fragmentos de copia-pase como este:

echo a;\
echo b;\
echo c


0

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


-1

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.


intente lo siguiente: $ out=$(cat) && eval "$out". presione enter después de la última línea y luego CTRL + D como se sugirió anteriormente.
Mohamed Bana
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.