bash - BASH - 将先前语句的状态传递给函数?
问题描述
如何将先前命令的状态传递给函数?
换句话说 - 为什么这些命令按预期工作:
$: false && echo "true" || echo "false"
>> false
$: true && echo "true" || echo "false"
>> true
但这不会:
function status () {
echo "true" || echo "false"
}
$: true && status
>> true
$: false && status
>>
而且,我怎样才能让上面的功能按预期工作?
解决方案
您可以显式测试$?
以获取最近执行的命令的退出状态:
status() {
if (( $? == 0 )); then
echo "true"
else
echo "false"
fi
}
(这比 , 更可靠a && b || c
,它可以同时 b
运行,c
如果a
为真,但b
在执行过程中遇到错误)。
此后:
$ true; status
true
$ false; status
false
顺便说一句,我个人会以一种反转流控制的方式来写这个:
run_with_status() {
local retval
if "$@"; then
echo "true"
else
retval=$?
echo "false"
return "$retval"
fi
}
run_with_status true
run_with_status false
该表单将更好地使用set -e
(否则将在达到打印能力之前退出错误false
)或ERR
陷阱,并避免潜在的错误,即有人添加echo
错误日志记录无意中更改了$?
.
推荐阅读
- django - 如何在 DjangoRestFramework 中实现按图像搜索功能?
- javascript - HTMLElement.querySelector() 使用cheerio
- sql - 未定义行数的计算
- nativescript - 可滚动标签 nativescript
- python - 如何加入熊猫列表?
- google-analytics - 我们如何检查是否正在为谷歌分析跟踪配置文件生成数据?
- java - 无需直接输入即可上传 Angular 表单的 Selenium 文件
- python - 如何按长向量列对数据帧进行聚类
- angular - 如何以角度运行下载的项目?
- reactjs - 如何使用 html5 视频标签在 reactjs 中创建视频播放列表?