Was macht diese Shell-Skriptzeile?


1

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?

Antworten:


4

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.


2

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.


0

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.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.