Używanie polecenia watch z argumentem zawierającym cudzysłowy

15

Próbuję sprawić, by zegarek działał poprawnie z poleceniami zawierającymi cytaty, a strona podręcznika użytkownika do obejrzenia nie jest zbyt szczegółowa na temat działania cytatów. Aby podać konkretny przykład, jak mogę uruchomić następujące polecenie w zegarku:

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

Próbowałem:

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

i

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

ale żadne z nich nie działa poprawnie.

Jerry
źródło

Odpowiedzi:

18

Chyba musisz uciec od $znaku:

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

w przeciwnym razie byłaby interpretowana przez powłokę, która skutkowałaby pustym ciągiem ( "") - tj. awkwypisałaby całą linię.

bmk
źródło
7

Zawsze możesz umieścić swoje polecenie w skrypcie powłoki, a następnie „obserwować” skrypt.

Resorath
źródło
2

Właśnie spotkałem podobny problem. Po przeczytaniu obejrzanej strony podręcznika man znalazłem rozwiązanie, które mogłoby działać, a mianowicie połączyć łańcuchy w bash. Ostateczne polecenie wyglądało dziwnie, na przykład:

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

lub

watch 'ps -ef | awk -F'"' ' '"'{print $2}'"'"
Adam_Yyx
źródło