获取命令的状态与命令的返回值

问题描述 投票:0回答:1

我下面有tcsh代码。

[我要做的就是将“ mail”命令的成功或失败分配给一个名为'mail_status'的变量,并使用'mail_status'值来打印STDOUT消息。

[expectation is mail]命令返回1,如果“收件人”列表中的任何收件人都是无效的收件人。如果所有收件人均有效,则状态返回为0。

  1. 我通过取消注释所有“ _TRY_1”来尝试代码。它没有按我想要的方式工作,'mail_status'为空白,因此执行了else条件。
  2. 我尝试注释掉“ _TRY_1”而取消注释“ _TRY_2_”。它甚至没有执行
  3. 我尝试注释掉“ _TRY_2”而取消注释“ _TRY_3_”。它没有用

我的问题:为什么_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
tcsh
1个回答
0
投票

要从上一个程序获取退出代码,请使用$status$?

mail -s [..trim..]
set mail_status = $status

[$?$status相同,并且对于Bourne shell用户更熟悉,因此可以说更好一些。

使用set mail_status = `mail ..`捕获命令的输出,而不是退出状态。

[我发现通常最好尽快地捕获$status,以防止将来由于脚本的更改而被其他命令意外覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.