【发布时间】:2016-12-15 12:35:54
【问题描述】:
我正在制作一个简单的install.zsh 来放入我的点文件中。它主要用于安装 ruby-gems、npm、pip 等东西,然后我使用这些包管理器安装其余的东西。
但为了达到那个水平,我仍然需要使用正确的平台相关语法安装这些包管理器。更不用说所有仅在依赖于平台的包管理器中可用的东西。
99% 的问题都可以使用这样的简单函数解决:
install(){
command -v brew && echo "installing $1 using Homebrew" && brew install "$1"
command -v pkg && echo "installing $1 using pkg" && sudo pkg install "$1"
command -v apt-get && echo "installing $1 using apt" && sudo apt-get install "$1"
}
由于 brew、pkg 和 apt-get 期望不同的包名,这在 1% 的情况下不起作用。例如,pkg 想要 dev/ruby 和 dev/ruby-gems; apt 想要 ruby-full,而 brew 只想要 ruby。
所以我需要一个子函数,将 $1 替换为平台正确的包名称,而不需要由较小的开关树组成的巨大开关树!我已经可以做到了,不仅不想写,而且我不想在添加新包时维护它......我宁愿拥有一个由行组成的纯文本“数据库”像这样的四个字段:
'ruby','ruby-full','dev/ruby,dev/ruby-gems',ruby
或者语法更好的东西,这不是很重要。子功能更重要。
当然,如果我想在这里重新发明轮子,如果有人能指点我一个会更好的轮子;)
【问题讨论】:
标签: shell installation zsh package-managers