Verwenden Sie die Ausgabe des Befehls als Beendigungscode

532
Sven Reuter

Für meine Continuous Integration-Skripts möchte ich überprüfen, ob der Git-Zweig nicht mit dem Master-Zweig synchron ist. Deshalb benutze ich

git rev-list --left-right --count master...my-branch-name 

Es wird etw zurückgeben. mögen

1 3 

(3 bekennt sich vor dem Master, 1 dahinter)

Beim Hinzufügen | cut -f1wird mir nur die erste Nummer (Commit hinter Master) zugewiesen.

Jetzt möchte ich das Skript nur mit dieser Nummer beenden, da 0 hinter dem Commit erfolgreich ist, alle anderen sollten einen Fehler geben.

Wie kann ich das machen? Ich habe es versucht

exit 'git rev-list --left-right --count master...my-branch-name | cut -f1' 

aber das erhebt sich

/ bin / bash: Zeile 66: exit: git rev-list --left-right --count master ... mein-branch-name | cut -f1: numerisches Argument erforderlich

Gibt es dafür eine Best Practice?

6

1 Antwort auf die Frage

5
nKn

Ändern Sie einfach Ihre Zeile:

exit 'git rev-list --left-right --count master...my-branch-name | cut -f1' 

zu:

exit `git rev-list --left-right --count master...my-branch-name | cut -f1` 

Alles, was sich zwischen den `Anführungszeichen befindet, wird ausgeführt und an das Bash-Skript zurückgegeben, sodass Sie alles tun können, was Sie möchten, einschließlich der Zuweisung zu einer Variablen.

Verwenden Sie "$ (...)" anstelle von Backticks: Der Unterschied ist viel einfacher zu erkennen. glenn jackman vor 6 Jahren 4
Möglicherweise ja, die Art und Weise, wie ich geschrieben habe, ist die historische Kompatibilitätsweise. Die "$ (...)" - Methode ist neuer und angeblich "kompatibler" zwischen verschiedenen Shells, aber beide sollten ohne Probleme in bash funktionieren. nKn vor 6 Jahren 0
Backticks sind ok für bash, aber schlecht für Menschen. Ich habe einige Sekunden gebraucht, um den Unterschied in Ihrer Antwort zu erkennen. glenn jackman vor 6 Jahren 1
Backticks sind auch schwieriger zu nisten. Barmar vor 6 Jahren 0