Wie füge ich mehrzeilige Bash-Codes in das Terminal ein und führe alles auf einmal aus?

98

Ich muss einen mehrzeiligen Bash-Code in das Terminal einfügen, aber jedes Mal, wenn ich dies tue, wird jede Zeile als separater Befehl ausgeführt, sobald sie eingefügt wird.

Nathan
quelle

Antworten:

103

Versuchen Sie, \am Ende jeder Zeile zu stehen, bevor Sie sie kopieren.

opsguy
quelle
18
Hinweis: Nachgestellte Leerzeichen werden es brechen!
Max Reeder
52

Ich bin wirklich überrascht, dass diese Antwort hier nicht angeboten wird. Ich war auf der Suche nach einer Lösung für diese Frage und denke, dies ist der einfachste Ansatz und flexibler / verzeihender ...

Wenn Sie mehrere Zeilen von einer Website / einem Texteditor / usw. in Bash einfügen möchten, unabhängig davon, ob es sich um Befehle pro Zeile oder eine Funktion oder ein gesamtes Skript handelt, beginnen Sie einfach mit a (und enden Sie mit a )und Enter, wie z im folgenden Beispiel:

Wenn ich den folgenden Blob hätte

function hello {
    echo Hello!
}
hello

Sie können ein Terminal mit bash einfügen und überprüfen, indem Sie:

  1. Beginnen mit (

  2. Fügen Sie Ihren Text ein und drücken Sie die Eingabetaste (um ihn hübsch zu machen) ... oder nicht

  3. Beenden Sie mit a )und drücken Sie die Eingabetaste

Beispiel:

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

Der eingefügte Text wird automatisch mit einem Voranstellen >für jede Zeile fortgesetzt . Ich habe mit mehreren Zeilen mit Befehlen pro Zeile, Funktionen und ganzen Skripten getestet. Hoffe das hilft anderen etwas Zeit zu sparen!

Versuchen Sie es erneut
quelle
4
einfachste Methode IMO
Hobroker
1
@ Toolkit für die einfachen Dinge, die es funktionieren wird, wie Sie beschrieben haben, aber die Lösung, die ich angeboten habe, funktioniert für komplexere Situationen (Zeilenumbrüche, mehrere Funktionen, ganze Skripte usw.)
TryTryAgain
1
Dadurch werden die eingefügten Befehle in einer Subshell ausgeführt, sodass häufig nicht das getan wird, was Sie möchten. Sie können geschweifte Klammern anstelle von Klammern verwenden, um die Ausführung in der aktuellen Shell zu erzwingen. aber wirklich, tu es auch nicht. Die Schale kann damit umgehen.
Tripleee
33

Wenn Sie den C-x C-eBefehl drücken , wird der definierte Standardeditor geöffnet.bashrc , können Sie danach alle leistungsstarken Funktionen Ihres Editors verwenden. Wenn Sie speichern und beenden, warten die Zeilen auf Ihre Eingabe.

Wenn Sie Ihren Editor definieren möchten, schreiben Sie einfach für Bsp. EDITOR=emacs -nwoder EDITOR=viinnerhalb von~/.bashrc

itirazimvar
quelle
2
Die Technik ist nützlich, aber beachten Sie, dass der Editor synchron (wie emacsund viwie) ausgeführt werden muss und beim Speichern und Beenden der Befehle sofort ausgeführt wird .
mklement0
16

Wenn eine Zeile mit |oder &&oder endet ||, wird sie zusätzlich zum Backslash in der nächsten Zeile fortgesetzt.

Glenn Jackman
quelle
13

Fügen Sie Klammern um die Linien hinzu. Beispiel:

$ (
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
)
abrkn
quelle
2
Beachten Sie (, dass Zahnspangen wie bei Klammern {im obigen Beispiel
genauso
2
Dies scheint eine frühere Antwort auf dieser Seite
Tripleee
12

Andere Möglichkeit:

bash << EOF
echo "Hello"
echo "World"
EOF
Lenar Hoyt
quelle
4

Um eine lange Reihe von Befehlen in einer Textdatei zu vermeiden, behalte ich meine Copy-Pase-Snippets wie folgt:

echo a;\
echo b;\
echo c
nvd
quelle
0

Versuchen Sie Folgendes:

echo $( 
    cmd1
    cmd2
    ...
)
Voltento
quelle
0

iTerm verarbeitet mehrzeilige Befehle perfekt. Es speichert mehrzeilige Befehle als einen Befehl. Anschließend können wir mit Cmd+ Shift+ ;im Verlauf navigieren.

Weitere iTerm-Tipps finden Sie unter Effektiv mit iTerm arbeiten

jeffery.yuan
quelle
-1

Versuchen

out=$(cat)

Fügen Sie dann Ihre Zeilen ein und drücken Sie Strg-D (EOF-Zeichen einfügen). Alle Eingaben bis Strg-D werden an die Standardausgabe der Katze weitergeleitet.

sspprroo
quelle
versuchen Sie dies : $ out=$(cat) && eval "$out". Drücken Sie nach der letzten Zeile die Eingabetaste und dann STRG + D wie oben vorgeschlagen.
Mohamed Bana