команда 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'\'')'
Другие вопросы по тегам