【问题标题】:Fail if condition function is undefined如果条件函数未定义则失败
【发布时间】:2016-12-04 12:35:52
【问题描述】:

假设我在 if 语句中使用了一个函数:

if isSomeConditionTrue; then
  echo "true";
else
  echo "false";
fi

如果定义了isSomeConditionTrue,这将正常工作。

但是,如果 isSomeConditionTrue 未定义,例如由于拼写错误或缺少导入,它的计算结果为 "false" 而不是失败。

set -u 没有区别。

【问题讨论】:

  • 这是一个调试问题;确保已定义 isSomeConditionTrue

标签: bash if-statement undefined-function


【解决方案1】:

我建议在你的if: 之前插入这个:

command_not_found_handle () { false; }

【讨论】:

  • 不幸的是,这似乎不适用于旧版本的 Bash。
  • 这也只是将正常退出状态 127 替换为退出状态 1。如果使用足够新的 bash 版本,则将 command_not_found_handle 设置为实际 exit shell 可能有用。
【解决方案2】:

最终,您只需要调试您的脚本并确保您有适当的导入并且不打错字。也就是说,有一种方法可以区分未定义的命令和正常的失败,尽管它可能不是您想在整个脚本中使用的东西。

isSomeConditionTrue
case $? in
  127) echo "Command not found" ;;
  0) echo "Command succeeds" ;;
  *) echo "Some other problem" ;;
esac

退出状态为 127 表示未找到该命令。 (请注意,这意味着行为良好的程序本身不应返回状态 127;请考虑保留返回值。)

【讨论】:

  • 信息丰富,但过于冗长而无法使用,尤其是在组合多个条件函数时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2020-11-01
  • 1970-01-01
  • 2023-02-05
  • 2019-04-16
  • 2021-10-16
相关资源
最近更新 更多