我编写的 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 的路径)。
您对我的支票有什么建议吗?
答案1
我编写的脚本与您的相同,因为命令函数符合 POSIX 标准。您从用户那里收到了哪些投诉?
你可能会看到这个,但同样的问题在如何从 Bash 脚本检查程序是否存在?
答案2
您可以以同样的方式使用“which”。
编辑:
经过一些研究,我必须稍微改变这个建议。
虽然您可以以相同的方式使用“which”,但您最终会遇到与其他工具相同的不确定性(例如位置、类型甚至命令)。
似乎所有这些工具在某些情况下都可能无法清楚地确定启动的可执行文件,并且没有一个(如 icarus 所说)可以确保找到的可执行文件确实是您期望安装的可执行文件。
我想没有简单的方法可以解决您的问题,并且在不知道您有什么抱怨的情况下,很难提出任何替代方法。