找出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?