bash - 在 shell script 上,忽略特定错误

我已经将脚本设置为全局停止所有错误,

以下是片段:


recover database using backup controlfile until cancel || true; 
auto

我期待抛出一个"file not found"的错误,但希望在错误中继续执行,对于其他错误,希望脚本停止。

时间:

为了防止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


[[ $(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没有执行。

...