Назад | Перейти на главную страницу

Выполните другую команду, если на стандартном вводе есть какие-либо данные.

Как я могу запустить другую команду, если на стандартном вводе есть какие-либо данные

обычно используется в таких ситуациях:

какая-то команда без нормального вывода | ifinput mail -s 'какой-то вывод' мне

Небольшая хитрость с read:

$ echo 1 | { read -t 0 -N 0 && cat ; } 
1
$ { read -t 0 -N 0 && cat ; } 
$ 

Самым простым решением будет использование файла (если вы осмелитесь!). В -s переключатель означает «файл не нулевого размера». В &> перенаправления также включают ошибки (означает, что будут отправлены stdout и stderr).

OUTFILE=/tmp/command.out
some command &> $OUTFILE
[ -s "$OUTFILE" ] && mail -s "subject here" email@example.com < "$OUTFILE"

Изменить: комментарий ниже Гленна Джекмана содержит еще лучшее решение.

Вы также можете создать сценарий оболочки. Этот сценарий может сначала вызвать некоторую команду, которая перенаправляет вывод в файл, а затем вызвать команду mail из сценария для ее отправки, что, по сути, и делает SamKrieg без необходимости создания сценария оболочки. Причина для сценария может зависеть от того, хотите ли вы запустить эту команду как задание cron или что-то еще.