Soweit ich weiß, dient die Verwendung &
nach dem Befehl dazu, ihn im Hintergrund auszuführen.
Beispiel für &
Nutzung:tar -czf file.tar.gz dirname &
Aber wie wäre es &&
? (Sehen Sie sich dieses Beispiel an: /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
bash
shell
command-line
syntax
Kapitän
quelle
quelle
false && echo "Will not be printed"
.In der Schale, wenn Sie sehen
Die Absicht ist, den folgenden Befehl auszuführen,
&&
wenn der erste Befehl erfolgreich ist. Dies ist idiomatisch für Posix-Muscheln und nicht nur in Bash zu finden.Es soll verhindern, dass der zweite Prozess ausgeführt wird, wenn der erste fehlschlägt.
Sie werden vielleicht bemerken, dass ich das Wort "Absicht" verwendet habe - das hat einen guten Grund. Nicht alle Programme haben das gleiche Verhalten. Damit dies funktioniert, müssen Sie verstehen, was das Programm als "Fehler" betrachtet und wie es damit umgeht, indem Sie die Dokumentation und gegebenenfalls den Quellcode lesen.
Ihre Shell berücksichtigt einen Rückgabewert von 0 für true und andere positive Zahlen für false
Programme geben beim Beenden ein Signal zurück . Sie sollten 0 zurückgeben, wenn sie erfolgreich beendet werden, oder größer als Null, wenn sie dies nicht tun. Dies ermöglicht eine begrenzte Kommunikation zwischen Prozessen.
Das
&&
wirdAND_IF
in der Posix-Shell-Grammatik genannt , die Teil einerand_or
Liste von Befehlen ist, zu denen auch||
die mit einerOR_IF
ähnlichen Semantik gehört.Grammatiksymbole, zitiert aus der Dokumentation:
Und die Grammatik (auch aus der Dokumentation zitiert), die zeigt, dass eine beliebige Anzahl von
AND_IF
s (&&
) und / oderOR_IF
s (||
) aneinander gereiht werden kann (wieand_or
rekursiv definiert):Beide Operatoren haben die gleiche Priorität und werden von links nach rechts ausgewertet (sie sind linksassoziativ). Wie die Dokumente sagen:
Im ersten Fall ist false ein Befehl, der mit dem Status von beendet wird
1
was bedeutet,
echo foo
läuft nicht (dh Kurzschlussecho foo
). Dann wird der Befehlecho bar
ausgeführt.Im zweiten Fall wird true mit einem Code von beendet
0
und wird daher
echo foo
nicht ausgeführt, dannecho bar
wird ausgeführt.quelle
Eine häufig verwendete Verwendung für '&&' ist das Kompilieren von Software mit Autotools. Zum Beispiel:
Wenn die Konfiguration erfolgreich ist, wird make ausgeführt, um zu kompilieren. Wenn dies erfolgreich ist, wird make als root ausgeführt, um das Programm zu installieren. Ich benutze dies, wenn ich größtenteils sicher bin, dass die Dinge funktionieren werden, und es mir ermöglicht, andere wichtige Dinge zu tun, wie den Stapelüberlauf zu betrachten und den Fortschritt nicht zu überwachen.
Manchmal werde ich wirklich mitgerissen ...
Ich mache das, wenn ich zum Beispiel ein Linux von Grund auf neu mache.
quelle
set -o errexit
Bash bevorzugen .&&
Zeichenfolgen Befehle zusammen. Aufeinanderfolgende Befehle werden nur ausgeführt, wenn vorhergehende erfolgreich sind.In ähnlicher Weise kann
||
der nachfolgende Befehl ausgeführt werden, wenn der vorhergehende fehlschlägt.Siehe Bash Shell-Programmierung .
quelle
Siehe das Beispiel:
Shell versucht, ein Verzeichnis zu erstellen,
test
und versucht dann nur dann , eine Datei darin zu erstellen , wenn dies erfolgreich war .Sie können also eine Folge von Schritten unterbrechen, wenn einer von ihnen fehlgeschlagen ist.
quelle
Es ist eine zweite Anweisung auszuführen, wenn die erste Anweisung erfolgreich endet. Wie eine if-Anweisung:
Seine ersten Versuche, wenn 1 == 1, wenn das wahr ist, prüft es, ob 2 == 2
quelle
&&
if
Tests in Bash funktionieren. Ich habe es nie als eine Kette von Vergleichsbefehlen angesehen, die kaputt gingen, wenn einer von ihnen fehlschlug. Also hast du meine Gegenstimme :)||
eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
: Befehl_2 nur ausführen, wenn Befehl_1 erfolgreich ausgeführt wird.command_1 || command_2
: Befehl_2 nur ausführen, wenn Befehl_1 nicht erfolgreich ausgeführt wird.Es fühlt sich ähnlich an, wie eine 'if'-Bedingung in einer gängigen Programmiersprache ausgeführt wird, wie z. B. in
if (condition_1 && condition_2){...}
Bedingung_2, wenn Bedingung_1 ist,false
und inif (condition_1 || condition_2){...}
Bedingung_2 wird weggelassen, wenn Bedingung_1 isttrue
. Sehen Sie, es ist der gleiche Trick, den Sie zum Codieren verwenden :)quelle
Wenn das Programm den Befehl if prüft, erstellt das Programm eine Zahl namens Exit-Code. Wenn beide Bedingungen erfüllt sind, ist der Exit-Code Null (0), andernfalls ist der Exit-Code eine positive Zahl. Nur wenn Gleich angezeigt wird, wenn der Exit-Code Null (0) ist, bedeutet dies, dass beide Bedingungen erfüllt sind.
quelle
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi