
Eine ähnliche Frage wurde gestellt, aber da ich neu darin bin, Unix
war 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-rebase
und 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 branch
Ausgabe 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 diexargs
Befehl.
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'`