如果标准输入上有任何输入,我该如何运行另一个命令
通常用于以下情况:
一些没有正常输出的命令 | ifinput mail -s 'some output' me
答案1
最简单的解决方案是使用文件(如果你敢的话!)。-s
开关表示“文件大小不为零”。重定向&>
也包括错误(意味着将发送 stdout 和 stderr)。
OUTFILE=/tmp/command.out
some command &> $OUTFILE
[ -s "$OUTFILE" ] && mail -s "subject here" [email protected] < "$OUTFILE"
编辑:glenn jackman 下面的评论包含更好的解决方案。
答案2
一个小技巧read
:
$ echo 1 | { read -t 0 -N 0 && cat ; }
1
$ { read -t 0 -N 0 && cat ; }
$
答案3
您还可以创建一个 shell 脚本。该脚本可以首先调用一些命令,将输出重定向到文件,然后从脚本内部调用邮件命令将其发送出去,这实际上是 SamKrieg 所做的,无需创建 shell 脚本。使用脚本的原因可能取决于您是否要将此命令作为 cron 作业或其他东西运行。