ls "$ {VMX_DIR}" | grep -q Delta & gt; / dev / null 2 & gt; & amp; 1;
Es listet die Dateien in VMX_DIR auf und leitet sie dann an grep weiter, aber was macht es?
Es wird geprüft, ob eine Datei oder ein Pfad enthalten ist delta
im ${VMX_DIR}
Gibt dann das Ergebnis über den Exit-Code von grep zurück, da grep mit dem normalen Exit-Code 0 zurückgibt, wenn eine Übereinstimmung gefunden wird, und mit dem Fehlercode 1, wenn dies nicht der Fall ist. Es ist nützlich bei Bash-Bedingungen.
Hier ist, was es Aussage für Aussage tut:
ls "$ {VMX_DIR}"
Listet den Inhalt des im Pfad gespeicherten Verzeichnisses auf ${VMX_DIR}
| grep -q Delta
Leiten Sie die Ergebnisse an grep weiter und durchsuchen Sie die Ergebnisse der Verzeichnisliste nach delta
Ignoriert jede Ausgabe zu stark.
& gt; / dev / null 2 & gt; & amp; 1;
Leitet stdout zu um /dev/null
es wird also nicht gedruckt. Das 2>&1
Weist bash an, stderr an stdout umzuleiten (was jetzt geschieht) /dev/null
). Das Semikolon beendet nur die Zeile.
Von dem grep
Manpage:
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immedi-
ately with zero status if any match is found, even if an error
was detected. Also see the -s or --no-messages option.
Grundsätzlich wird nach einem Dateinamen gesucht, der diesen enthält delta
und zurückkehren true
wenn da ist oder false
wenn nicht. Was es mit diesem Wahrheitswert tatsächlich zu tun hat, ist die Vermutung, die jemand von dem kleinen Ausschnitt hat, den Sie dort haben.
Es sieht so aus, als ob nur festgestellt werden soll, ob das Wort 'Delta' in der Liste enthalten ist. In diesem Fall wird 0 zurückgegeben, andernfalls wird 1 zurückgegeben. Anhand des Rückgabewerts wissen Sie also, ob Delta vorhanden war oder nicht.
Der letzte Teil leitet um Standardausgabe und Standardfehler zu / dev / null - Das heißt, alle Ausgaben des Befehls grep (Fehler, Warnungen oder Übereinstimmungen) werden verworfen. Diese Art von Befehl kann nützlich sein, um eine einfache Prüfung ohne Ausgabe durchzuführen $?
Variable wird Null oder nicht Null sein, je nachdem, ob die grep
gelungen oder nicht.
Sie können diesen Code durch Ersetzen vereinfachen > /dev/null 2>&1
mit &>/dev/null
, was in diesem Fall dasselbe bewirkt: Alle Ausgabestreams umleiten zu /dev/null
.
Sehen E / A-Umleitung für Details.