Используйте множественные перенаправления команд в вызове - PullRequest
1 голос
/ 07 марта 2020

Следующая команда обрабатывает вывод канала дважды, используя tee:

echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null

Как и ожидалось, он выдает:

ALPHA
ALPHA
BRAVO

При попытке вызвать его с помощью watch this:

watch 'echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'

Возвращает:

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `echo -e "ALPHA\nBRAVO" | tee >(head -n 1) >(tail) >/dev/null'

Как мне избежать команды, чтобы использовать ее с часами?

1 Ответ

1 голос
/ 07 марта 2020

Подстановки процессов являются расширением, не все реализации sh поддерживают их. Вы можете использовать перенаправления, чтобы обойти это ограничение. Как и

watch '{ { printf '\''ALPHA\nBRAVO\n'\'' |
           tee /proc/self/fd/3 |
           head -n 1 >&4
         } 3>&1 | tail >&4
       } 4>&1'

Просто обратите внимание, что это не более переносимо, чем watch 'bash -c ...'.

...