command -v "program" >/dev/null 2>&1
如果我需要 POSIX-ly 找出它是否program
安装在-statement 中,我正在使用该构造if
。
从它的帮助页面不清楚,它是只检查路径还是也检查可执行位?
$ command --help
command: command [-pVv] command [arg ...]
...
-v print a description of COMMAND similar to the `type' builtin
...
谢谢。
答案1
command -v
使用 PATH 来查找可执行文件。
它还检查权限。如果您尝试command -v a_non_executable_file
,则不会打印任何内容。
你可以尝试一下strace bash -c 'command -v grep'
你会看到access(2)
系统调用被执行了(这个系统调用检查用户对文件的权限)。command -v
将在 PATH 中搜索您可以执行的第一个文件。