如果出错退出 tcsh 脚本

Exit tcsh script if error

我正在尝试编写 tcsh 脚本。 如果它的任何命令失败,我需要脚本退出。

在 shell 中我使用 set -e 但我不知道它在 tcsh

中的等价物
#!/usr/bin/env tcsh

set NAME=aaaa
set VERSION=6.1

#set -e equivalent
#do somthing

谢谢

在(t)csh中,set用于定义一个变量; set foo = bar 会将值 bar 分配给变量 foo(就像 foo=bar 在 Bourne shell 脚本中所做的那样)。

无论如何,从tcsh(1):

Argument list processing
   If the first argument (argument 0) to the shell is `-'  then  it  is  a
   login shell.  A login shell can be also specified by invoking the shell
   with the -l flag as the only argument.

   The rest of the flag arguments are interpreted as follows:

[...]

   -e  The  shell  exits  if  any invoked command terminates abnormally or
       yields a non-zero exit status.

因此您需要使用 -e 标志调用 tcsh。让我们测试一下:

% cat test.csh
true
false

echo ":-)"

% tcsh test.csh
:-)

% tcsh -e test.csh
Exit 1

无法在 运行 时设置它,就像 shset -e 一样,但您可以将它添加到 hashbang:

#!/bin/tcsh -fe
false

所以它会在您 运行 ./test.csh 时自动添加,但是当您键入 csh test.csh 不会 添加它,所以我的建议使用类似 start.sh 的东西,它将调用 csh 脚本:

#!/bin/sh
tcsh -ef realscript.csh