web-dev-qa-db-fra.com

Comment coller des codes bash multilignes dans un terminal et tout exécuter en même temps?

Je dois coller un code multi-ligne bash dans un terminal, mais chaque fois que je le fais, chaque ligne est exécutée comme une commande séparée dès qu'elle est collée.

57
Nathan

Essayez de mettre \ à la fin de chaque ligne avant de la copier.

62
opsguy

Je suis vraiment surpris que cette réponse ne soit pas proposée ici, j'étais à la recherche d'une solution à cette question et je pense que c'est l'approche la plus simple et la plus flexible/pardonnable ...

Si vous souhaitez coller plusieurs lignes d'un site Web/éditeur de test/etc, dans bash, qu'il s'agisse de commandes par ligne ou d'une fonction ou d'un script entier ... commencez simplement par un ( et terminez par un ) et entrez, comme dans l'exemple suivant:

Si j'avais le blob suivant

function hello {
    echo Hello!
}
hello

Vous pouvez coller et vérifier dans un terminal en utilisant bash en:

1) Commençant par ( 

2) Coller votre texte et appuyer sur Entrée (pour le rendre joli) ... ou pas

3) Terminant avec un ) et en appuyant sur Entrée

Exemple:

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

Le texte collé se poursuit automatiquement avec un > par défaut pour chaque ligne. J'ai testé avec plusieurs lignes avec des commandes par ligne, des fonctions et des scripts entiers. J'espère que cela aide les autres à gagner du temps!

22
TryTryAgain

Si vous appuyez sur la commande C-x C-e qui ouvrira votre éditeur par défaut et défini .bashrc, vous pourrez alors utiliser toutes les fonctionnalités puissantes de votre éditeur. Lorsque vous enregistrez et quittez, les lignes attendent votre entrée.

Si vous voulez définir votre éditeur, écrivez simplement pour Ex. EDITOR=emacs -nw ou EDITOR=vi à l'intérieur de ~/.bashrc

19
itirazimvar

En plus de la barre oblique inverse, si une ligne se termine par | ou && ou ||, elle sera poursuivie à la ligne suivante.

11
glenn jackman

Ajoutez des parenthèses autour des lignes. Exemple:

$ (
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
)
6
abrkn

Pour éviter une longue ligne de commandes dans un fichier texte, je conserve mes extraits copiés comme suit:

echo a;\
echo b;\
echo c
2
nvd

Une autre possibilité:

bash << EOF
echo "Hello"
echo "World"
EOF
1
Lenar Hoyt

iTerm gère parfaitement les commandes sur plusieurs lignes. Il enregistre les commandes sur plusieurs lignes en une seule commande. Nous pouvons ensuite utiliser Cmd + Shift +; naviguer dans l'histoire. Vérifiez plus de conseils iTerm sur Travailler efficacement avec iTerm

0
jeffery.yuan

Essayez de cette façon:

echo $( 
    cmd1
    cmd2
    ...
)
0
voltento