![包管理器帮助的 Bash 函数/别名](https://linux22.com/image/1243607/%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E5%B8%AE%E5%8A%A9%E7%9A%84%20Bash%20%E5%87%BD%E6%95%B0%2F%E5%88%AB%E5%90%8D.png)
我正在使用 Arch Linux。我已经packer
安装了 AUR 软件包,但我希望能够同时使用这pacman
两个命令。我想我需要一个函数来实现这一点——我的意思是,每当我使用 pacman 时,它都会尝试使用 packer,如果失败(无效选项),它将使用 pacman-color。它还可以根据参数决定使用哪个程序。我不能只使用 packer(别名 pacman='sudo packer'),因为 packer 没有一些选项,如 -R 来删除软件包。但是,我希望始终使用它来安装和升级软件包,因为它可以从默认存储库以及 AUR 安装。
有人知道如何实现这一点吗,或者可以给我指出正确的方向吗?我是 Bash 脚本的新手。
谢谢。
编辑:我试过了pacman () { sudo packer $@ || sudo pacman-color $@ }
,唯一的问题是如果打包程序失败它会打印错误(例如 pacman -V 打印打包程序:)Option '-V' is not valid.
。
答案1
我自己找到了解决办法。这个方法运行良好(在 .bashrc 或 .zshrc 或其他任何文件中):
pacman() {
if [[ $1 = -h* || $1 = "--help" ]]; then
echo "pacman help:\n"
/usr/bin/pacman -h
echo "\n\npacker help:\n"
packer -h
elif [[ $1 = -V* || $1 = -Q* ]]; then
pacman-colour "$@"
elif [[ $1 = -Si* || $1 = -Ss* ]]; then
packer "$@"
elif [[ ( $1 != -Sy $1 != -Sc* && $1 = -S* ) || $1 = -G* ]]; then
sudo packer "$@"
else
sudo pacman-color "$@"
fi
}
编辑:实际上,开发人员制作了一种称为 pacwrap 的东西,它可以更好地完成工作。
除非必要,它不会使用 sudo,而是根据所使用的操作选择 pacman 或 packer。