我在我的 bashrc
中有一个小函数,可以运行脚本并在完成时将输出发送到我的电子邮件。 代码如下:
run() {
email=example@gmail.com
last="${!#}"
rest="${@:1:($#-1)}"
(nohup $rest &> $last < /dev/null; mail -s "$rest" "$email" < "$last") &
}
这个函数的使用方法如下:
run ./script.sh arg1 arg2 output
看起来大部分时间都能工作,但有时邮件没有发送,尽管脚本已经完成。我怀疑是因为我关闭了服务器终端造成的。在这些情况下,由于 nohup
的存在,脚本仍在运行,但最终不会发送邮件。希望得到一些指导,以便使其正常工作。
rest="${@:1:($#-1)}"
这种写法不太好 -- 无法准确地表示参数向量,因此存在参数字符串分割不正确、通配符扩展等风险。你可以使用rest=( "${@:1:($#-1)}" )
,然后用"${rest[@]}"
(或者对于单个参数主题行版本,使用"${rest[*]}"
... 或者更准确地,使用printf -v rest_cmd '%q ' "${rest[@]}"
,然后将"$rest_cmd"
作为邮件参数)来扩展它。 - Charles Duffy