我的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
命令是否返回非零退出状态,因为它在反引号中?
答案 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行为)。