1

我的 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命令是否返回非零退出状态?

4

1 回答 1

3

事实证明,这是 tcsh 版本 6.17.05 中引入的行为更改(请参阅原始错误报告)。从 tcsh 版本 6.18.00 开始,它看起来会被恢复(参见回归错误报告),但它显然已经流行起来了。

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

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

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

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

于 2012-07-10T10:26:42.247 回答