Как я могу запустить другую команду, если на стандартном вводе есть какие-либо данные
обычно используется в таких ситуациях:
какая-то команда без нормального вывода | 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 или что-то еще.