Verwenden des Befehls watch mit einem Argument, das Anführungszeichen enthält

15

Ich versuche, watch mit Befehlen, die Anführungszeichen enthalten, zum Funktionieren zu bringen, und die Watch-Manpage ist nicht sehr detailliert über die Funktionsweise von Anführungszeichen. Um ein konkretes Beispiel zu geben, wie kann ich den folgenden Befehl in watch ausführen:

ps -ef | awk -F' ' '{print $2}'

Ich habe es versucht:

watch "ps -ef | awk -F' ' '{print $2}'"

und

watch 'ps -ef | awk -F\' \' \'{print $2}\''

aber keines davon funktioniert richtig.

Jonderry
quelle

Antworten:

18

Ich denke du musst dem $Schild entkommen :

watch "ps -ef | awk -F' ' '{print \$2}'"

Andernfalls würde es von der Shell interpretiert, was zu einer leeren Zeichenfolge ( "") führen würde - dh awkdie gesamte Zeile drucken würde.

bmk
quelle
7

Sie können Ihren Befehl jederzeit in ein Shell-Skript einfügen und dann das Skript "beobachten".

Resorath
quelle
2

Ich bin gerade auf ein ähnliches Problem gestoßen. Nachdem ich die Watch Man Page gelesen hatte , fand ich eine Lösung, die funktionieren könnte, nämlich das Verketten von Strings in Bash. Der letzte Befehl sah seltsam aus, wie zum Beispiel:

watch "ps -ef | awk -F' ' '"'{print $2}'"'"

oder

watch 'ps -ef | awk -F'"' ' '"'{print $2}'"'"
Adam_Yyx
quelle