我有一个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
答案 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!