gpt4 book ai didi

bash - 忽略 shell 脚本中的特定错误

转载 作者:行者123 更新时间:2023-11-29 08:40:55 28 4
gpt4 key购买 nike

我有一小段 shell 脚本,它可能会引发很多错误。我将脚本当前设置为在出现所有错误时全局停止。但是我希望这个小部分略有不同。

这是片段:

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

我预计这最终会引发“找不到文件”错误。但是我想继续执行这个错误。对于任何其他错误,我希望脚本停止。

实现此目标的最佳方法是什么?

bash 版本 3.00.16

最佳答案

为了使 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 :

The shell does not exit if the command that fails is part of thecommand list immediately following a while or until keyword, part ofthe test in an if statement, part of any command executed in a && or|| list except the command following the final && or ||, any commandin a pipeline but the last, or if the command’s return status is beinginverted with !. A trap on ERR, if set, is executed before the shellexits.

编辑:为了改变执行仅当执行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 未执行。

关于bash - 忽略 shell 脚本中的特定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17830326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com