如果第一个bash命令输出为零行,如何执行第二个bash命令?



我想为它创建一个crontab条目。因此,解决方案必须是一行,因为我不想编写一个脚本,然后在crontab中调用该脚本(在脚本文件中使用完整的if else,我可以很容易地做到这一点)。

但我想使用一些&&||来实现以下目标:

cmd1 | cmd2 | cmd3 | wc -l != 0? mail -s "Found xyz"  ...

如何做到这一点?

试试这个:

test "$(unreadable | long | list | of | commands | in | one | line)" && mail -s ...

如果您只是想知道命令是否产生任何输出,那么计算行数是没有用的。

你可以这样写:

cmd1 | cmd2 | cmd3 | grep '^' >/dev/null && mail -s "Found xyz"

对于&&,如果至少有一行输出,它将运行最后的命令(mail)。如果您想在没有任何输出的情况下发送邮件,请使用||

解释:如果grep命令找到任何匹配给定模式的行,则该命令成功。模式^匹配一行的开头…任何行。因此,如果至少有一行(即使是空白一行),grep '^'就会成功。>/dev/null然后丢弃输出。

(您也可以使用grep -q而不是>/dev/null,但是grep将在第一次匹配后退出,这可能会导致早期命令的SIGPIPE错误,并可能出现奇怪的问题。)我认为>/dev/null方法在管道中使用时更安全。

相关内容

  • 没有找到相关文章

最新更新