Hom's Blog


判断Bash指令存在与否

使用which

使用which两有个trick: - 第一,找不到stderr会告诉你在环境变量中找不到. 所以要将错误重定向. - 第二, 这里which commd 不能加入`号. 否则会变成运行后面的指令…`which gcc`$(which gcc)都会运行gcc, 而[ which gcc ] 则会报语法错..

if which brew 2>/dev/null; then
  echo "brew exists!"
else
  echo "nope, no brew installed."
fi

或者通过返回值判断:

which brew >/dev/null 2>&1
if [ $? == 0 ]; then
  echo "brew exists!"
else
  echo "nope, no brew installed."
fi

使用-x

-x是判断一个命令是否存在于PATH并且是可执行的.

if ! [ -x "$(command -v git)" ]; then
  echo 'git is not installed.' >&2
fi

使用另外一些内建命令

有时候有些系统没有which, 有些which不会设置有效的退出状态, 此时可能出现兼容问题.

command -v foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
type foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
hash foo 2>/dev/null || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }

这个用法参考stackoverflow的解答. 推荐用法, 但这三个命令不常用啊…

如果不存在指令, 就可以结合下面来自定义一套:

shopt -s  expand_aliases ; alias fn="command"


◆ 本文地址: http://platinhom.github.io/2015/08/17/commandExistBash/, 转载请注明 ◆

前一篇: Bash中按行读取和处理
后一篇: Sybyl原子类型


Contact: Hom / 已阅读()
Source 类别: Coding  标签: Bash