我不是脚本大师,所以我必须在这里问:)
我该如何为此实现错误处理:
find . -type f|sed 's_\.\/__' > $PATH
即当这不成功时中止。
非常感谢你提前托马斯
尝试使用 && 或 || 之类的条件
find . -type f|sed 's_./__' > $PATH && if_true_do_something || if_false_do_something
首先,您的命令至少肯定会失败,因为 $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。