Eine ähnliche Frage wurde gestellt, aber da ich neu bei Unix
bin Die Antwort war mir aufgrund des Kontextes 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 Branches.
Wann immer ich einen Commit ausführen muss, muss ich meinen Zweig überprüfen und dann den entsprechenden Befehl als
eingebengit pull --rebase origin <branch-name>
Ich wollte einen Alias als git-rebase
schreiben und was es tun würde, ist, dass es zuerst git branch
ausführt .
Die Ausgabe von git branch 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 dann die Ausgabe davon an den obigen Befehl übergeben.
Außerdem möchte ich die Ausgabe des Befehls git branch
unterdrücken . Ich mache das nicht, weil ich zu faul bin, den ganzen Befehl einzugeben, sondern weil ich gerne mehr über die Leistungsfähigkeit von Unix-Bash erfahren möchte. In der Hoffnung etwas daraus zu lernen
Akzeptierte Antwort:
Zuerst müssen Sie den git branch
massieren Ausgabe in ein brauchbares Format
$ git branch
experiment
* master
new feature
$ git branch | awk '/^\* / { print $2 }'
master
Das wollen Sie jetzt als Argument verwenden:
$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')
(oder Sie können Backticks wie in Psusis Antwort verwenden).
Das sollte Alles klar, der awk-Befehl sollte immer genau einer Zeile entsprechen, und ich gehe davon aus, dass Sie keine Leerzeichen in Zweignamen haben dürfen. Für alles, was viel komplizierter ist, würde ich es wahrscheinlich in eine Funktion (oder ein Skript) packen, damit Sie die Zwischenwerte einigermaßen überprüfen können.