为了使 bash 忽略特定命令的错误,你可以说:
some-arbitrary-command || true
这将使脚本继续。例如,如果您有以下脚本:
$ cat foo
set -e
echo 1
some-arbitrary-command || true
echo 2
执行它会返回:
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
2
在缺少...之下|| true
在命令行中,它会生成:
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
引用自manual http://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin:
如果失败的命令是命令的一部分,则 shell 不会退出
紧接着命令列表while
or until
关键字,部分
测试在if
语句,在 a 中执行的任何命令的一部分&&
or
||
列出除了最后一个命令之外的命令&&
or ||
,任意命令
在管道中但最后一个,或者如果命令的返回状态是
倒置与!
。一个陷阱ERR
,如果设置,则在 shell 之前执行
退出。
编辑:为了改变行为,以便执行应该继续only if执行some-arbitrary-command
回file not found
作为错误的一部分,您可以说:
[[ $(some-arbitrary-command 2>&1) =~ "file not found" ]]
例如,执行以下命令(没有名为MissingFile.txt
存在):
$ cat foo
#!/bin/bash
set -u
set -e
foo() {
rm MissingFile.txt
}
echo 1
[[ $(foo 2>&1) =~ "No such file" ]]
echo 2
$(foo)
echo 3
这会产生以下输出:
$ bash foo
1
2
rm: cannot remove `MissingFile.txt': No such file or directory
注意echo 2
被处决但是echo 3
wasn't.