1) Я не уверен, что подоболочка (или фон) полезна здесь:
sudo sh -c '( tail -n1 -f /path/to/nameOfLog.log & ) | grep -q "Started .*Application"'
не должен ли простой канал?
sudo sh -c 'tail -n1 -f /path/to/nameOfLog.log | grep -q "Started .*Application"'
2) Ваша «попытка 1»:
sudo timeout 5 grep -q "Started .*Application" <(tail -n1 -f /path/to/nameOfLog.log &)
расширяет перенаправление ввода в командной строке, которая запускает
sudo
, а не внутри sudo
. Дескриптор файла, который он открывает, не передается через sudo
в grep
, поэтому grep
не может открыть / dev / fd / 63
псевдо-файл.
То же самое и с фоном хвоста
здесь, в этом нет необходимости.
3) И, как phk прокомментировал , ваша «попытка 2»:
sudo sh -c 'timeout 5 grep -q "Started .*Application" <(tail -n1 -f /path/to/nameOfLog.log &)'
... явно запускает sh
, а не bash
или любой другой другая более функциональная оболочка. Обычный стандарт sh
не поддерживает , как и
тире
, который используется как sh
в Debian и Ubuntu.
Когда вы запускаете su
, запускается оболочка входа в систему root
, которая, скорее всего, будет bash
в Ubuntu.Но использование sudo
и su
является избыточным, они оба предназначены для повышения привилегий, и после sudo
вы уже используете повышенные привилегии , поэтому нет необходимости в su
. Вместо этого, если вы хотите запустить оболочку внутри sudo
, просто скажите явно, какой из них:
sudo bash -c 'timeout 5 grep -q "Started .*Application" <(tail -n1 -f /path/to/nameOfLog.log &)'