Como colo códigos bash de várias linhas no terminal e executo tudo de uma vez?


102

Preciso colar um código bash de várias linhas no terminal, mas sempre que o faço, cada linha é executada como um comando separado assim que é colada.

Respostas:


104

Experimente colocar \no final de cada linha antes de copiá-la.


18
Nota: espaços à direita irão quebrá-lo!
Max Reeder

53

Estou realmente surpreso que essa resposta não seja oferecida aqui, eu estava em busca de uma solução para essa questão e acho que essa é a abordagem mais fácil, e mais flexível / perdoadora ...

Se você gostaria de colar várias linhas de um site / editor de texto / etc., No bash, independentemente de se tratar de comandos por linha, função ou script inteiro ... simplesmente comece com a (e termine com a )e Enter, como no seguinte exemplo:

Se eu tivesse o seguinte blob

function hello {
    echo Hello!
}
hello

Você pode colar e verificar em um terminal usando o bash:

  1. Começando com (

  2. Colando seu texto e pressionando Enter (para torná-lo bonito) ... ou não

  3. Terminando com a )e pressionando Enter

Exemplo:

imac:~ home$ ( function hello {
>     echo Hello!
> }
> hello
> )
Hello!
imac:~ home$ 

O texto colado continua automaticamente com um prefixo >para cada linha. Eu testei várias linhas com comandos por linha, funções e scripts inteiros. Espero que isso ajude outras pessoas a economizar tempo!


4
método mais fácil IMO
Hobroker

1
@Toolkit para as coisas simples, ele funcionará como você descreveu, mas a solução que ofereci funcionará para situações mais complexas (quebras de linha, funções múltiplas, scripts inteiros, etc.)
Try TryAgain

1
Isso executa os comandos colados em um subshell, portanto, geralmente não faz o que você deseja. Você pode usar colchetes em vez de parênteses para forçar a execução no shell atual; mas realmente, simplesmente não faça nada. A concha aguenta.
tripleee

33

Se você pressionar o C-x C-ecomando que irá abrir o seu editor padrão que o definiu .bashrc, depois disso você pode usar todos os recursos poderosos do seu editor. Quando você salvar e sair, as linhas aguardarão sua entrada.

Se você quiser definir seu editor, basta escrever para Ex. EDITOR=emacs -nwou EDITOR=videntro de~/.bashrc


2
A técnica é útil, mas observe que o editor deve ser executado de forma síncrona (como emacse vifazer) e, ao salvar e sair, os comandos são executados instantaneamente .
mklement0

16

Além da barra invertida, se uma linha terminar com |ou &&ou ||, ela continuará na próxima linha.


13

Adicione parênteses ao redor das linhas. Exemplo:

$ (
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
Do nota, como parêntese (, os aparelhos {também funcionam da mesma forma, no exemplo acima
GypsyCosmonaut


12

Outra possibilidade:

bash << EOF
echo "Hello"
echo "World"
EOF

4

Para evitar uma longa linha de comandos em um arquivo de texto, mantenho meus snippets copy-pase assim:

echo a;\
echo b;\
echo c



-1

Experimentar

out=$(cat)

Em seguida, cole suas linhas e pressione Ctrl-D (inserir o caractere EOF). Todas as entradas até Ctrl-D serão redirecionadas para stdout do gato.


tente o seguinte: $ out=$(cat) && eval "$out". pressione Enter após a última linha e depois CTRL + D como sugerido acima.
Mohamed Bana
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.