Watch-Befehl mit "echo -e" verwenden

747
Gefolge

Ich möchte Zeilen einer dynamischen Datei überwachen und verwende dazu den watchBefehl. Ich habe 2 Dateien: test-statusund iplist_test. Ich kontrolliere etwas iplist_testund tippe diese Ausgabe ein test-status. iplist_testDatei hat 150 Zeilen und ich möchte ein Ergebnis wie 14/150oder 25/150usw. sehen. Ich verwende dazu den folgenden Befehl:

watch -n .1 echo -e "$(cat test-status | wc -l)\/$(cat iplist_test | wc -l)" 

Der Befehl funktioniert nicht wie ein watchBefehl, er ist statisch. Ich aktualisiere manuell für Live-Ergebnisse. Was ist los mit meinem Befehl?

1

1 Antwort auf die Frage

2
Kamil Maciorowski

Die Ausgabe ist statisch, da $()Ihre Shell vor dem watchStart aufgelöst wird .

Zitieren mit ''sollte helfen. Einfache Anführungszeichen verhindern die Erweiterung. Dieser Weg $()wird wörtlich weitergegeben watchund jedes Mal analysiert:

watch -n .1 'echo -e "$(cat test-status | wc -l)/$(cat iplist_test | wc -l)"' 

Sie missbrauchen auch cat. Dies sollte ohne unnötige catProzesse funktionieren :

watch -n .1 'echo -e "$(<test-status wc -l)/$(<iplist_test wc -l)"'