我下面有tcsh代码。
我要做的就是将“ mail”命令的成功或失败分配给一个名为“ mail_status”的变量,并使用“ mail_status”值来打印STDOUT消息。
期望是邮件命令返回1,如果“收件人”列表中的任何收件人是无效的收件人。如果所有收件人均有效,则状态返回为0。
我的问题: 为什么_TRY_1 _TRY_2_和_TRY_3_不起作用?
#! /tool/pandora/bin/tcsh
set eval_1 = PASSED
set eval_2 = PASSED
set mail_status = 7
if ($eval_1 == "PASSED" && $eval_2 == "PASSED") then
echo "1"
# _TRY_1_ set mail_status = `mail -s " PASSED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp1.log`
# _TRY_2_ set mail_status = eval "mail -s " PASSED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp1.log"
# _TRY_3_ set mail_status = `mail -s " PASSED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp1.log`
else
echo "2"
# _TRY_1_ set mail_status = `mail -s " FAILED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp2.log`
# _TRY_2_ set mail_status = eval "mail -s " FAILED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp2.log"
# _TRY_3_ `mail -s " FAILED, 1: $eval_1, 2: $eval_2" foo@foo.com < tmp2.log`
endif
# _TRY_3_ set mail_status = $status
echo ""
# _TRY_3_ echo "mail_status = $status"
echo ""
if ($mail_status == 0) then
echo ""
echo "EMAIL SENT"
echo ""
else
echo ""
echo "FAILED SENDING EMAIL"
echo ""
endif
答案 0 :(得分:1)
要从上一个程序获取退出代码,请使用$status
或$?
:
mail -s [..trim..]
set mail_status = $status
$?
与$status
相同,并且对于Bourne shell用户更熟悉,因此可以说它要好一些。
使用set mail_status = `mail ..`
捕获命令的输出,而不是退出状态。
我发现通常最好尽快地捕获$status
,以防止在以后对脚本进行更改时被其他命令意外覆盖。