gpt4 book ai didi

linux - 如果命令失败,不中断脚本,但收集退出代码

转载 作者:太空狗 更新时间:2023-10-29 11:28:50 25 4
gpt4 key购买 nike

我需要在设置了 set -e 的脚本中执行命令。此命令是一般脚本流程的一个异常(exception),因为它可能会失败,但这并不重要:脚本可以继续。我希望该命令中断脚本;相反,我想保留退出代码以供以后评估。

我想出了以下脚本:

#!/bin/bash

set -e
false && res1=$? || res1=$?
true && res2=$? || res2=$?
echo $res1
echo $res2

(我的命令将代替 falsetrue)

这是正确的方法吗?

编辑

顺便说一句,这个非常相似的构造根本不起作用:

#!/bin/bash

set -e
false || res1=$? && res1=$?
true || res2=$? && res2=$?
echo $res1
echo $res2

编辑

测试其中一个建议:

#!/bin/bash

set -e
false || { res1=$?; true; }
true || { res2=$?; true; }
echo $res1
echo $res2

这是行不通的。结果是:

1
(empty line)

最佳答案

不要尝试使用&&|| 来组成三元表达式;它太脆弱了。只需使用 if 语句即可。

if cmd; then res=$?; else res=$?; fi

更好(?)的是,您可以将赋值放在条件本身中,以看似空洞的 if 语句为代价减少重复:

if cmd; res=$?; then :; fi

虽然用单个 || 可能写得更清楚:

{ cmd; res=$?; } || true

(请注意,我交替使用了 true:;POSIX 保证 : 是一个内置的 shell,但是 true 可能更具可读性。)

关于linux - 如果命令失败,不中断脚本,但收集退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547498/

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