退出csh shell不要立即中止执行

时间:2017-03-13 16:39:47

标签: shell posix csh tcsh

(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相同的操作?

1 个答案:

答案 0 :(得分:0)

你想在POSIX shell中做什么?如果您想打印某些内容并正常退出,请执行printf "%s\n" 'my message'; exit 0。 (有关不使用echo

的原因,请参阅https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-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\"")'