加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

普通shell vs subshel??l vs“bash -c”last命令退出代码

发布时间:2020-12-15 18:32:23 所属栏目:安全 来源:网络整理
导读:我试图得到与链接的最后一个命令的退出代码和||正确. 我遇到了一个我无法解释的奇怪行为.请帮忙. 我使用此测试脚本返回给定的退出代码: gdubicki@mbp-greg:~ $cat exit-code.sh#!/bin/bashecho "running exit-code with $1"exit $1 这按预期工作: gdubicki
我试图得到与&&链接的最后一个命令的退出代码和||正确.

我遇到了一个我无法解释的奇怪行为.请帮忙.

我使用此测试脚本返回给定的退出代码:

gdubicki@mbp-greg:~ $cat exit-code.sh
#!/bin/bash
echo "running exit-code with $1"
exit $1

这按预期工作:

gdubicki@mbp-greg:~ $./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?
running exit-code with 1
last command exit code: 1

gdubicki@mbp-greg:~ $(./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?)
running exit-code with 1
last exit code: 1

但:

gdubicki@mbp-greg:~ $/bin/bash -c "./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?"
running exit-code with 1
last exit code: 0

为什么我在这里获得退出代码0?

Why do I get exit code 0 here?

原因是使用双引号,在将参数传递给新的Bash进程之前执行参数扩展(特殊参数$?).如果打开调试和详细模式,您可以清楚地看到:

$set -xv
$bash -c "(./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?)"
bash -c "(./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?)"
+ bash -c '(./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: 0)'
running exit-code with 1
last exit code: 0
$set +xv

在这种情况下$?设置为0,因为上一个命令(在此示例中设置-xv)成功执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读