从以前的函数中获取返回码

时间:2014-07-03 22:18:58

标签: shell unix

我正在尝试在Unix上编写一个提醒脚本,一旦完成某些相当耗时的任务,它将向我发送一封电子邮件。我希望它也向我发送任务的返回代码,但我很难在脚本中完成这项工作

现在脚本看起来像这样:

AUTOMATIC_SUBJECT="$? was returned by $(history -1| cut -c 6- | head -1)"

if [[ $# = 0 ]]; then
   SUBJECT=$AUTOMATIC_SUBJECT
   BODY=""
elif [[ $# = 1 ]]; then
   SUBJECT=$AUTOMATIC_SUBJECT
   BODY=$1
elif [[ $# = 2 ]]; then
   SUBJECT=$1
   BODY=$2
fi
echo "$BODY" | mailx -s "$SUBJECT" email@address.com

如果我运行以下命令:

cat 123;send_reminder.sh

如果123是当前目录中不存在的文件,我得到主题为“0由cat 123返回; send_reminder.sh”(我会做一个剪切或最终摆脱'; send_reinder.sh',但现在这并不重要。)

但是,如果我跑

cat 123;send_reminder.sh "cat 123 returned $?" "body"

我得到“猫123返回2”作为主题。请注意“$?”的位置,在我执行history命令之前需要它的脚本中,否则它将返回该错误代码。

所以问题是,为什么我的脚本没有返回正确的错误代码?我觉得它与将自己分配给automatic_subject变量有关,但我不知道如何绕过它。

1 个答案:

答案 0 :(得分:1)

要使$?值正确,请尝试:

cat 123; source send_reminder.sh

或等效,但键入较少:

cat 123; . send_reminder.sh. 

获取脚本意味着它在当前shell中执行。这具有温和的副作用,即shell变量(例如AUTOMATIC_SUBJECT,SUBJECT和BODY)将保留在当前环境中。

或者,您需要在命令行中传递$?