我下面有tcsh代码。
[我要做的就是将“ mail”命令的成功或失败分配给一个名为'mail_status'的变量,并使用'mail_status'值来打印STDOUT消息。
[expectation is mail]命令返回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" [email protected] < tmp1.log`
# _TRY_2_ set mail_status = eval "mail -s " PASSED, 1: $eval_1, 2: $eval_2" [email protected] < tmp1.log"
# _TRY_3_ set mail_status = `mail -s " PASSED, 1: $eval_1, 2: $eval_2" [email protected] < tmp1.log`
else
echo "2"
# _TRY_1_ set mail_status = `mail -s " FAILED, 1: $eval_1, 2: $eval_2" [email protected] < tmp2.log`
# _TRY_2_ set mail_status = eval "mail -s " FAILED, 1: $eval_1, 2: $eval_2" [email protected] < tmp2.log"
# _TRY_3_ `mail -s " FAILED, 1: $eval_1, 2: $eval_2" [email protected] < 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
要从上一个程序获取退出代码,请使用$status
或$?
:
mail -s [..trim..]
set mail_status = $status
[$?
与$status
相同,并且对于Bourne shell用户更熟悉,因此可以说更好一些。
使用set mail_status = `mail ..`
捕获命令的输出,而不是退出状态。
[我发现通常最好尽快地捕获$status
,以防止将来由于脚本的更改而被其他命令意外覆盖。