检查程序是否在路径中

时间:2011-04-19 19:26:29

标签: sh

可以自行检查程序是否存在或是否在路径中?

即,不是在“哪个”程序的帮助下。

2 个答案:

答案 0 :(得分:2)

我不相信sh可以直接。但也许是这样的:

which() {
  save_IFS=$IFS
  IFS=:
  for d in $PATH; do
    test -x $d/$1 && echo $d/$1
  done
  IFS=$save_IFS
}

这是一个很好的变体,它使用子shell,因此不需要恢复IFS:

which() (
  IFS=:
  for d in $PATH; do
    test -x $d/$1 && echo $d/$1
  done
)

另外,(在bash中)如果命令已经执行过,而bash已经完成了PATH搜索,你可以看到它在hash -t中找到了什么。

bash-3.2$ hash -t which
bash: hash: which: not found
bash-3.2$ which foo
bash-3.2$ hash -t which
/usr/bin/which

答案 1 :(得分:2)

实用程序command -v $CMD显然是一个可移植的选项(在POSIX的意义上);另请参阅非常相似(尽管特定于bash)question,特别是this answer