在tcsh中,如何在反引号中获取命令的退出状态?

时间:2012-07-10 10:26:42

标签: tcsh

我的tcsh启动脚本中有以下代码:

set _color_count = `sh -c "tput -T${TERM}-256color colors 2>/dev/null"`
if ($? == 0) then  # check if it was a valid terminal type
    if ($_color_count != 256) then  # sanity-check
        echo "Warning: Color count '$_color_count' for '${TERM}-256color' is not 256"
    endif
    setenv TERM "${TERM}-256color"
endif

我的问题是退出状态($?)总是为零,即使tput命令由于终端类型无效而返回非零退出状态也是如此。如果我没有捕获命令的输出,检查退出状态可以正常工作:

sh -c "tput -T${TERM}-256color colors 2>/dev/null"

我如何确定tput命令是否返回非零退出状态,因为它在反引号中?

1 个答案:

答案 0 :(得分:3)

事实证明,这是tcsh版本6.17.05中引入的行为变化(参见original bug report)。看起来它将从tcsh版本6.18.00恢复(见regression bug report),但它显然已经成为野外。

但是,对于受影响的版本,您可以在反引号中运行命令之前设置变量$ anyerror:

set anyerror
set _color_count = `sh -c "tput -T${TERM}-256color colors 2>/dev/null"`

根据我的tcsh手册页,了解特殊的shell变量状态

  

status 最后一个命令返回的状态,除非设置了变量anyerror,否则将传播管道或反引号扩展中的任何错误(这是默认的csh行为)。