检测cli安装的功能

function to detect cli installation

我有内联检查来检测 cli 包的安装,以节省安装现有包的时间,但我发现它很乏味,而且对于那些长列表来说不是那么可读。

例如:

which -s redis-cli || brew install redis
which -s java || brew cask install java
which -s yarn || npm install -g yarn

有什么功能可以让它好看吗?例如:

function npmInstall(name) {
    if (which -s name) {
      return;
    }

    npm install -g name;
}

非常感谢!

您可以将客户端包作为参数传递。

例如,script.sh

for cli in $@; do
  which "$cli" || npm install -g "$cli"
done

通过 ./script.sh java yarn

调用

更新:

由于包名可能与可执行文件名不同,您可以使用 Bash 关联数组来处理这些差异。仅当在数组中找不到该包的值时,才会使用作为参数传递给脚本的包名称:

for pkg in $@; do
  declare -A exe
  exe=([redis]="redis-cli" [otherpkg]="otherpkg-cli")
  package=${exe[$pkg]:-$pkg} 
  which "$package" || npm install -g "$package"
done