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

sin*_*yma 16 unix shell posix

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

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

if which <command>; then
   ...snip...
fi
Run Code Online (Sandbox Code Playgroud)

但是,which当命令不存在时,Solaris和MacOS 不提供退出失败代码,它们只是向STDOUT输出错误消息.

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

有任何想法吗?

sin*_*yma 22

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

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

  • 我100%同意使用`command -v`,我一直使用它来检查命令的可用性.例如,`command -v CMD>/dev/null || echo'CMD not found'`如果需要,不要愚蠢! (3认同)
  • POSIX shell 不需要实现 `command -v` 选项。请参阅http://stackoverflow.com/q/34572700/1175080。 (3认同)
  • @TechZilla:为什么'if'语句很愚蠢? (2认同)
  • `command -v` 并不完全执行 `which` 的操作:如果参数是别名或 shell 函数,后者会以非零代码退出。 (2认同)