在 bash 中,处理程序如何RETURN
访问当前返回代码?
例如
\n\n#!/usr/bin/env bash\n\nfunction A() {\n function A_ret() {\n # How to access the return code here?\n echo "${FUNCNAME} ???"\n }\n trap A_ret RETURN\n echo -n "${FUNCNAME} returning code $1 ... "\n return $1\n}\nA 1\n
Run Code Online (Sandbox Code Playgroud)\n\n这打印
\n\nA returning code 1 ... A_ret ???\n
Run Code Online (Sandbox Code Playgroud)\n\n我想要打印
\n\nA returning code 1 ... A_ret 1\n
Run Code Online (Sandbox Code Playgroud)\n\n如何A_ret
获取A
返回码?
类似于此 stackoverflow 问题在 \xe2\x80\x9ctrap EXIT\xe2\x80\x9d 中获取 shell 脚本的退出代码。
\n看起来陷阱是在语句实际设置 的新值RETURN
之前执行的。考虑这个在语句之前设置的示例。return
$?
$?
return
a () {
a_ret () {
echo "${FUNCNAME} $?"
}
trap a_ret RETURN
printf "${FUNCNAME} returning code $1 ... "
(exit 54)
return $1
}
a 1
Run Code Online (Sandbox Code Playgroud)
在bash
3.2 和 4.3 中,我得到输出
a returning code 1 ... a_ret 54
Run Code Online (Sandbox Code Playgroud)
我想说这是一个需要报告的错误。作为解决方法,您始终可以将子 shellexit
与您想要返回的值一起使用:
a () {
...
(exit $1)
return $1
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
236 次 |
最近记录: |