2016-12-30 5 views
-1

Der folgende Befehl, den ich verwenden möchte, um die Anzahl der Dateien in einem Verzeichnis zu überwachen, zeigt den erforderlichen Wert nicht dynamisch an.Unerwartetes Verhalten des Uhr-Befehls

watch "echo \`ls -l| wc -l\`" 

Allerdings funktioniert folgender Befehl gut.

watch "ls -l| wc -l" 

Was ist die Erklärung für dieses Verhalten?

+0

Stack-Überlauf ist eine Seite für die Programmierung und Entwicklungsfragen. Diese Frage scheint off-topic zu sein, weil es nicht um Programmierung oder Entwicklung geht. Siehe [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) in der Hilfe. Vielleicht [Super User] (http://superuser.com/) oder [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) wäre ein besserer Ort, um zu fragen. Siehe auch [Wo veröffentliche ich Fragen zu Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Antwort

1

Es ist weil die Shell Backticks erweitert, bevor watch jemals ausgeführt wird. Wenn Sie set -x verwenden, sehen Sie, dass der Befehl, die tatsächlich endet Aufruf

watch "echo 42" 

was erklärt, warum es ist immer das gleiche.

Sie können die ` mit einem Backslash, um es buchstäblich zu passieren:

watch "echo \`ls -l | wc -l\`" 

Oder noch einfacher durch einfache Anführungszeichen verwenden, die alle Erweiterungen hemmen:

watch 'echo `ls -l | wc -l`' 
+1

PS: [stoppe mit Backticks] (http://mywiki.wooledge.org/BashFAQ/082) –