我有几个运行相同的 cron 脚本的覆盆子,但是在其中一个上更新/升级 jessie 之后,我得到了
ssmtp:: command not found
我可以从命令行运行该命令,但从命令行运行脚本失败,所以不是真正的 cron 问题。
我正在使用完整路径:/usr/sbin/ssmtp
并且在命令行上使用该命令可以正常执行
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
这是脚本代码的片段
#!/bin/bash
set -o pipefail
mysendmail="/usr/sbin/ssmtp"
…
$(echo -e "To: $tophil\nSubject: $(hostname) $ip2" | $mysendmail $tophil 2>&1)
我在这里改写一个一次性评论作为答案,因为提问者说它解决了他们的问题。
这段代码让我有两个问题。我认为修复它们不会解决 missing 的问题
ssmtp
,但显然它们可以解决。$( ... )
从脚本的最后一行删除包装器。这告诉 shell 使用包装命令的输出,并根据您设置行的方式来尝试执行它。(如果该命令没有生成输出,那么您将不会得到任何错误。)它通常用于将命令结果插入字符串,或将它们分配给变量
每次使用变量时都要双引号。例如,
在某些情况下,双引号变量并不是绝对必要的,但是因为这样做永远不会出错,所以总是引用它们是最简单和最安全的。