【问题标题】:Errorhandling Bash Script [duplicate]错误处理 Bash 脚本 [重复]
【发布时间】:2013-09-15 09:20:42
【问题描述】:

我不是脚本大师,所以我必须在这里问:)

我该如何为此实现错误处理:

find . -type f|sed 's_\.\/__' > $PATH

即失败时中止。

非常感谢您提前 托马斯

【问题讨论】:

  • 你能定义this was not successful吗?关于findsed
  • 你能告诉我们什么特别不成功吗?
  • 您似乎在使用PATH 变量来存储文件名。别;它是一个内置的 shell 参数,用于存储用于命令查找的目录列表。使用不同的变量名。

标签: linux bash shell


【解决方案1】:

首先你的命令至少肯定会失败,因为 $PATH 是一个无效的单一路径。

find . -type f | sed 's_\.\/__' > $PATH

如果您想检查两个命令是否正常工作,请使用 pipefail 选项,如果该行中的任何命令返回一个,而不仅仅是最后一个,则该选项将使管道调用返回非零状态。

set -o pipefail  ## You have this only once in the script.

find . -type f | sed 's_\.\/__'  > $PATH || {
    echo "Failed."
    exit 1  ## This probably is what you mean to abort.
}

# Shell script continues here... 

另一种选择:

...
find . -type f | sed 's_\.\/__' > $PATH
if [[ $? -ne 0 ]]; then
    echo "Failed."
    exit 1
fi

例子:

> set +o pipefail  ## Disable pipefail (default).
> true | false
> echo $?
1
> false | true
> echo $?
0

> set -o pipefail  ## Enable pipefail.
> true | false
> echo $?
1
> false | true
> echo $?
1

请注意,即使false 不在最后,最后一个命令也会返回 1。而当pipefail 被禁用时,管道命令仍将返回0,即使其中一个命令(false)返回1。

【讨论】:

    【解决方案2】:

    尝试使用 && 或 || 之类的条件

    find . -type f|sed 's_./__' > $PATH && if_true_do_something || if_false_do_something

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2010-11-05
      • 2023-01-15
      • 1970-01-01
      相关资源
      最近更新 更多