-1

我正在编写一个 shell 脚本,我需要在执行任何操作之前检查是否安装了一些依赖项。我发现我可以用which <package>它来查看它是否已安装。问题是,当找不到该依赖项时,它会将以下错误抛出到控制台的输出中:

which: no abc in (/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.emacs.d/bin:/usr/local/bin:/home/pace/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:...)

我想避免这样的输出,因为我已经在某些事情失败时显示了错误消息。我怎样才能避免which写任何东西?

function is_installed() {
  if [[ ! $(which $1) ]]
  then
    echo "[ERROR]: $1 $2"
    exit 1
  fi
}
4

1 回答 1

1

好吧,可能有更好的方法来做你想做的事情(我不确定“最好”的方法),但你可以重定向 stderr 和 stdout 以隐藏输出的结果:

function is_installed() {
  if [[ ! $(which $1 > /dev/null 2>&1 ) ]]
  then
    echo "[ERROR]: $1 $2"
    exit 1
  fi
}

(最近版本的 bash 支持使用>& /dev/nulltoo 来同时做这两个,但上面的更便携)

编辑——试试这个

function is_installed() {
  which $1 > /dev/null 2>&1
  if [ $? = 1 ] ; then
    echo "[ERROR]: $1 $2"
    exit 1
  fi
}
于 2021-05-30T16:38:59.267 回答