如何运行tcsh shell命令并有选择地忽略状态?

时间:2010-06-14 23:13:38

标签: unix shell csh tcsh

我有一个tcsh shell脚本,我想在大多数时间以非零状态的错误停止,但在某些情况下我想忽略它。例如:

#!/bin/tcsh -vxef

cp file/that/might/not/exist . #Want to ignore this status
cp file/that/might/not/exist . ; echo "this doesn't work"
cp file/that/must/exist . #Want to stop if this status is nonzero

4 个答案:

答案 0 :(得分:4)

我不知道tcsh,但是使用bash,您可以使用set -e来执行此操作。设置-e标志后,如果任何子命令失败,bash将立即退出(有关技术详细信息,请参阅手册)。未设置时,将继续执行。所以,你可以这样做:

set +e
cp file/that/might/not/exist .  # Script will keep going, despite error
set -e
cp file/that/might/not/exist .  # Script will exit here
echo "This line is not reached"

答案 1 :(得分:3)

我们走了:生成一个新shell,使用';'忽略第一个状态,它返回全部清除。

$SHELL -c 'cp file/that/might/not/exist . ; echo "good"'

答案 2 :(得分:2)

mustsucceed || exit 1
mustbeignored || :

答案 3 :(得分:1)

如果您不在乎它是否失败,请从您的shebang中删除-e。如果你看过tcsh documentation,@ Adam的答案应该给你一个提示。

此外,您可以丢弃错误消息:

cp dont_care       . >& /dev/null
cp still_dont_care . >& /dev/null || echo "not there"
cp must_be_there   . >& /dev/null || exit 1 # oh noes!