找出POSIX系统上是否存在命令

我希望能够通过shell脚本判断任何POSIX系统上是否存在命令。

在Linux上,我可以执行以下操作:

if which <command>; then
   ...snip...
fi

然而,Solaris和MacOS的which不给退出故障代码时,该命令不存在,他们只是打印错误信息到stdout。

另外,我最近发现which命令本身不是POSIX(请参阅http://www.opengroup.org/onlinepubs/009695399/utilities/)

有任何想法吗?


command -v是一个POSIX指定的命令,它执行哪些操作。

它被定义为在未找到命令或发生错误时返回> 0。


POSIX会说:“如果找不到命令,退出状态应为127.”所以你可以这样做

<command>
if [ "${?}" = 127 ]; then
   <handle not found>
fi

编写shell脚本时,通常可以使用bash shell( #!/bin/bash ),因为如果没有数组,几乎不可能正确处理带空格的参数和/或文件名。 在这种情况下,bash内建type -p与其相当,并且因为它是内置的,所以它是便携式的。


您可以将“which”的stdout / stderr读入变量或数组(使用反引号),而不是检查退出代码。

如果系统没有“which”或“where”命令,您也可以获取$ PATH变量的内容,然后遍历所有目录并搜索给定的可执行文件。 这基本上是这样做的(尽管它可能会使用一些缓存/优化$ PATH结果)。

链接地址: http://www.djcxy.com/p/57069.html

上一篇: Find out if a command exists on POSIX system

下一篇: How can I quickly check if Linux `unzip` is installed using Perl?