(t)csh的手册说:
退出[expr] shell以指定的expr的值退出(表达式,如表达式中所述)或者, 没有expr,值为0。
但是如果运行tcsh -c 'exit 5; echo after exit'; echo $?
,我们得到以下输出(测试ucntu / centos和freebsd 10.3的tcsh):
after exit
0
似乎跳过了exit
命令。如何获得与POSIX / bash shell相同的操作?
答案 0 :(得分:0)
你想在POSIX shell中做什么?如果您想打印某些内容并正常退出,请执行printf "%s\n" 'my message'; exit 0
。 (有关不使用echo
)
这可能是csh
中由于向后兼容原因而保留在tcsh
中的错误。
(t)csh
是面向行的,其他shell不是,并且通常一次处理一行,例如
这个脚本:
#!/bin/tcsh -f
exit 5
echo 'after exit'
执行时以状态5退出。
另一方面,此脚本会打印after exit
。
#!/bin/tcsh -f
exit 5; echo 'after exit'
更令人惊讶的是,包含传递给/bin/tcsh
的换行符的字符串被视为单行脚本,而不是多行脚本。
% perl -e 'system("/bin/tcsh -f -c \"exit 5\necho after\"")'