Wie kann ich die Ausgabe eines Befehls als Argument an einen anderen übergeben?

Wie kann ich die Ausgabe eines Befehls als Argument an einen anderen übergeben?

Eine ähnliche Frage wurde gestellt, aber da ich neu darin bin, Unixwar mir die Antwort aufgrund des Kontexts nicht klar. Ich möchte die Ausgabe eines Befehls als Argument an einen anderen übergeben. Ich verwende Git für die Quellcodeverwaltung und arbeite an drei verschiedenen Zweigen.

Immer wenn ich committen muss, muss ich meinen Branch überprüfen und dann den entsprechenden Befehl eingeben als

git pull --rebase origin <branch-name>

Ich wollte einen Alias ​​als schreiben git-rebaseund dieser würde zuerst ausgeführt git branch.

Die Ausgabe des Git-Zweiges sieht so aus

experiment
*master
new feature

Wenn wir also zusätzlich zum Hauptzweig zwei Zweige haben, werden alle Zweige angezeigt und der aktuelle Zweig wird mit einem Stern markiert. Ich möchte die mit einem Stern markierte Zeile extrahieren und die Ausgabe davon dann an den obigen Befehl übergeben.

Außerdem möchte ich die Ausgabe des Befehls unterdrücken git branch. Ich mache das nicht, weil ich zu faul bin, den gesamten Befehl einzutippen, sondern weil ich mehr über die Leistungsfähigkeit von Unix Bash erfahren möchte. Ich hoffe, etwas daraus zu lernen

Antwort1

Zuerst müssen Sie die git branchAusgabe in ein nutzbares Format bringen

$ git branch
  experiment
* master
  new feature

$ git branch | awk '/^\* / { print $2 }'
master

Nun möchten Sie dies als Argument verwenden:

$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')

(oder Sie können Backticks verwenden, wie in der Antwort von psusi).

Dassollenok sein, der awk-Befehl sollte immer genau einer Zeile entsprechen, und ich gehe davon aus, dass Sie keine Leerzeichen in Zweignamen haben dürfen. Bei allem, was viel komplizierter ist, würde ich es wahrscheinlich in eine Funktion (oder ein Skript) einbinden, damit Sie die Zwischenwerte auf Plausibilität prüfen können.

Antwort2

Es gibt auch diexargsBefehl.

xargs - build and execute command lines from standard input

Die obige Antwort von @Useless würde also folgendermaßen lauten:

git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin

Antwort3

Es gibt mehrere Möglichkeiten. Die einfachste ist die Backtick-Ersetzung:

git pull --rebase origin `git branch | sed -ne 's/\*//p'`

verwandte Informationen