在编写bash时,如果要判断某条命令是否存在,应该如何写呢?
我尝试了如下的写法,不知道错误在哪里
if [ -n `which brew`]; then echo 'brew exist' else echo 'brew does not exist' fi
用来判断brew
命令是否存在,可是明明没有brew
,却总是显示 "brew exist"
在编写bash时,如果要判断某条命令是否存在,应该如何写呢?
我尝试了如下的写法,不知道错误在哪里
if [ -n `which brew`]; then echo 'brew exist' else echo 'brew does not exist' fi
用来判断brew
命令是否存在,可是明明没有brew
,却总是显示 "brew exist"
which want_to_find > /dev/null 2>&1 if [ $? == 0 ]; then echo "exist" else echo "dose not exist" fi
if which brew 2>/dev/null; then echo "brew exists!" else echo "nope, no brew installed." fi
which
在找不到命令时会输出「xxx not found」到 stderr 的。
if hash brew 2>/dev/null; then
echo 'brew exist'
else
echo 'brew does not exist'
fi
Hash是一个缓存表
系统初始Hash表是空的,如果系统重启也会清空,当外部命令执行是会到PATH里找该命令,然后记录在Hash里,当再执行时就到Hash里取,这样会加快执行速度。
1 回答2.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.4k 阅读
2 回答1.1k 阅读✓ 已解决
3 回答1.7k 阅读
1 回答1.1k 阅读✓ 已解决
最好避免使用 which,做为一个外部的工具,并不一定存在,在发行版之间也会有区别,有的系统的 which 命令不会设置有效的 exit status,存在一定的不确定性。
Bash 有提供一些内建命令如 hash、type、command 也能达到要求。
详见 http://stackoverflow.com/questions/59...