-3

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

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

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

即当这不成功时中止。

非常感谢你提前托马斯

4

2 回答 2

1

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

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

于 2013-09-11T11:22:08.850 回答
0

首先,您的命令至少肯定会失败,因为 $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

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

于 2013-09-11T11:24:54.000 回答