我正在尝试编写一个notify-finish
可以附加到任何命令的脚本。完成后,它将运行以下参数给出的命令,然后在命令完成时向用户发送电子邮件。这是我所拥有的:
PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
这在大多数情况下都有效,但是当参数包含空格时,引号会被删除。
工作示例:
notify-finished rsync -avz source/ user@remote:dest/
失败的例子:
notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
在第二种情况下,$@
扩展为rsync -avz -e ssh -c blowfish source user@remote:dest/
,缺少单引号。它也不适用于双引号,也不适用于$*
.
在阅读了其他帖子后,我尝试将命令放入数组中,但我遇到了完全相同的问题:
CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
我如何使它适用于所有论点?