我编写的 BASH 脚本有两个要求。
目前我检查它们是否以这种方式安装,我认为这是一个很好的解决方案,直到我收到用户的一些投诉:
command -v fping >/dev/null 2>&1 || { echo >&2 "Sorry but fping is not installed. Aborting."; exit 1; }
command -v ifup >/dev/null 2>&1 || { echo >&2 "Sorry but ifupdown is not installed. Aborting."; exit 1; }
我想以一种适用于尽可能多的平台和潜在用户配置的方式编写此代码(例如,不包含 /bin 或 /sbin 的路径)。
你对我的支票有什么建议吗?
我写的脚本和你的一样,因为命令函数是 POSIX 兼容的。您从用户那里收到了哪些投诉?
您可能会看到这一点,但在如何检查 Bash 脚本中是否存在程序?
您可以以相同的方式使用“哪个”。
编辑:
经过一些研究,我将不得不稍微改变这个建议。
虽然您可以以相同的方式使用“which”,但您最终会遇到与使用其他工具相同的不确定性(例如,位置、类型甚至命令)。
似乎所有这些工具在某些情况下都可能无法清楚地确定可执行文件已启动,并且没有一个(如 icarus 所述)可以确保找到的可执行文件确实是您希望安装的那个。
我想没有简单的方法可以解决您的问题,而且在不知道您抱怨什么的情况下,很难提出任何替代方法。