可以自行检查程序是否存在或是否在路径中?
即,不是在“哪个”程序的帮助下。
答案 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。