【发布时间】:2014-02-10 15:02:04
【问题描述】:
我的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"作为邮件参数) -
谢谢你的提示,我一定会改变的。