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.

Antworten:


103

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


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!


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


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.


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
)

2
Beachten Sie (, dass Zahnspangen wie bei Klammern {im obigen Beispiel
genauso



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


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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.