检测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
我有内联检查来检测 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