【问题标题】:How to determine Bash function state upon exit?如何在退出时确定 Bash 函数状态?
【发布时间】:2022-01-27 02:29:01
【问题描述】:

在一些 bash 代码上应用 Google Shell Style Guide 时,我了解到我并不完全知道如何确定函数的退出状态。特别是,我想知道是否有任何成功的 bash 函数返回状态 0,或者是否只有某些命令确保它返回状态 0。

给出的例子:

#######################################
# Delete a file in a sophisticated manner.
# Arguments:
#   File to delete, a path.
# Returns:
#   0 if thing was deleted, non-zero on error.
#######################################
function del_thing() {
  rm "$1"
}

描述rm动作,显然会导致状态0。但是,我想知道是否所有其他不会导致错误的命令也返回状态0。(不包括设置特定返回状态的特定命令,如@ 987654325@)。

为了找出答案,我想检查某些函数的返回状态。然而,我还不完全知道该怎么做。因此,我想问:如何打印/查看/检查函数的返回状态?

【问题讨论】:

  • 旁白:function del_thing() { 语法将 POSIX sh 形式 del_thing() { 与传统 ksh 语法 functon del_thing { 混合在一起,与 both POSIX sh 和传统 ksh 不兼容.最好只使用 POSIX 形式并完全跳过 function 关键字;另见wiki.bash-hackers.org/scripting/obsolete(那里的第一个和第三个表都有相关条目)。
  • (阅读您链接的样式指南,它混合了符合 POSIX 的函数声明和不兼容的错误声明;后者的存在导致我建议不要信任它,甚至比内部不一致)。

标签: bash function


【解决方案1】:

如何打印/查看/检查退货状态

变量$?保存上一条命令的退出状态。

literally anything
echo "$?"

del_thing
echo "$?"

注意:在检查失败或成功时不要使用$?。使用if,如if ! del_thing; then echo "it failed"; fi

注意:不要将function() 一起使用。只需使用name() { .. },不使用function。见https://wiki.bash-hackers.org/scripting/obsolete。 (https://github.com/google/styleguide/pull/624 ..)

我想知道是否所有其他不会导致错误的命令也返回状态 0

0 退出状态被视为成功。非零退出状态被视为失败。例如,if 表达式检查命令是否具有零退出状态 - if anything; then echo "anything exited with zero exit status"; fi

函数具有最后执行的命令的退出状态。通常,任何东西都有最后一个执行命令的退出状态。 del_thing 函数的退出状态与rm 命令的退出状态相同,因为rm 命令是函数内部执行的最后一件事。

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 2015-02-24
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多