команда watch не работает со специальными символами и кавычками
watch -n 1 "paste <(ssh ai02 'nvidia-smi pmon -s um -c 1') <(ssh ai03 'nvidia-smi pmon -s um -c 1' )"
Приведенная выше команда используется для горизонтального складывания статистики двух серверных графических процессоров. Он работает без команды часов, но выдает следующую ошибку
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `paste <(ssh ai02 'nvidia-smi pmon -s um -c 1') <(ssh ai03 'nvidia-smi pmon -s um -c 1' )'
1 ответ
Вы не привели воспроизводимого примера, но я думаю, что мне удалось сделать его для тестирования:
watch -n1 "paste <(seq -w 1000 | shuf -n '10' ) <(seq -w 1000 | shuf -n '10')"
вывести аналогичную ошибку:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `paste <(seq -w 1000 | shuf -n '10' ) <(seq -w 1000 | shuf -n '1
0')'
Чтобы решить эту проблему более простым способом, мы можем изменить
sh -c
для
bash -c
:
watch -n1 -x bash -c 'paste <(seq -w 1000 | shuf -n "10" ) <(seq -w 1000 | shuf -n "10")'
От
watch
руководство по эксплуатации:
-x, --exec
Pass command to exec(2) instead of sh -c which reduces the need to
use extra quoting to get the desired effect.
Если вам нужно сохранить апострофы из исходной командной строки, вы также можете уйти:
watch -e -n1 -x bash -c 'paste <(seq -w 1000 | shuf -n '\''10'\'' ) <(seq -w 1000 | shuf -n '\''10'\'')'