Ich arbeite an einem Bash-Skript, das ich für verschiedene Arten von VCS arbeiten möchte. Ich denke darüber nach zu testen, ob ein Verzeichnis ein Repo für ein System ist, indem ich einen typischen Info-Befehl ausführe und den Rückkehrcode, den Erfolg oder den Fehler überprüfe. Im Pseudocode:
if a svn command succeded;
Then run svn commands
elif a darcs command succeded;
Then run darcs commands
elif a mercurial command succeded;
then run hg commands
else
something else
fi
Ich kann einen Befehl ausführen, z. B.
darcs show repo
verwenden $?
, um seinen Rückkehrcode abzurufen.
Meine Frage ist: Gibt es eine gute Möglichkeit, die Rückkehrcode-Nummer in einer Zeile auszuführen und zurückzugeben? beispielsweise
if [ 0 -eq `darcs show repo`$? ];
Oder muss ich eine Funktion definieren?
Eine zusätzliche Anforderung ist, dass sowohl stderr als auch stdout gedruckt werden müssen.
quelle
Wie bereits erwähnt, wird
if command
geprüft, ob diescommand
erfolgreich ist. In der Tat[ … ]
ist ein gewöhnlicher Befehl, der außerhalb einerif
oderwhile
Bedingung verwendet werden kann, obwohl es ungewöhnlich ist.Für diese Anwendung würde ich jedoch die Existenz der charakteristischen Verzeichnisse testen. Dies ist in weiteren Randfällen korrekt. Bash / ksh / zsh / dash-Version (ungetestet):
quelle
Nun, es ist nicht sehr hübsch, aber es ist eine Möglichkeit, es inline zu machen:
Wenn Sie den Exit-Code eines Befehls testen, müssen Sie per Definition keinen expliziten Vergleich durchführen, es sei denn, Sie möchten mehr als Erfolg oder Misserfolg. Es gibt wahrscheinlich einen eleganteren Weg, dies zu tun.
quelle
Eine andere prägnante Option wäre:
quelle