像使用 apt、dnf 那样使用 pacman —— 给 pacman 增加子命令样式的参数
用过 Arch 的都知道其包管理器 pacman 以及很多“AUR helper”如 yay、paru 等,使用的 -S
形式的“选项”(OPTIONS)作为参数。这和主流的 apt、dnf/yum 等的子命令式参数有着明显差异,很多新接触的都是一脸懵逼,比如最经典的 -S
、-Sy
、-Syy
、-Syu
、-Syyu
、-Syuu
这一连串看着类似的选项。
很多人就算用 Arch 挺长时间也根本不知道什么意思,就是入门时看的什么“小白教材”这么写就这么一直用了。
其实 apt 和 dnf/yum 的“底层” dpkg、rpm 也是选项式的,而他们作为直接与用户交互的封装都使用了子命令式,说明子命令应该对大部分人来说是更易使用的,因为它更“human-readable”。所以简单写了个脚本,让用户也可以以 apt 那样的子命令使用 pacman 或 yay。
#!/usr/bin/sh
# Shortcuts for pacman/yay/paru
if command -v "yay" >/dev/null; then
PKG="yay"
elif command -v "paru" >/dev/null; then
PKG="paru"
else
PKG="pacman"
fi
if [ "$USER" != "root" ] && [ "$PKG" = "pacman" ]; then
NEED_SUDO="sudo "
else
NEED_SUDO=""
fi
if [ $# -eq 0 ]; then
echo -e "The user is $USER"
echo -e "The package manager is $PKG\n"
$PKG
exit 0
fi
sub_cmd=$1
shift
case $sub_cmd in
"search")
$PKG -Ss $@
;;
"show")
# from repo
$PKG -Si $@
;;
"info")
# from local
$PKG -Qi $@
;;
"update")
echo 'Avoid doing partial upgrades.'
echo 'In other words, never run update(-Sy); instead, always use upgrade(-Syu).'
echo 'Refer to https://wiki.archlinux.org/title/System_maintenance 3.2 3.3'
echo '请避免部分更新,不要运行 update(-Sy),而是运行 upgrade(-Syu)。'
echo '请参阅 https://wiki.archlinuxcn.org/wiki/系统维护 3.2 3.3'
;;
"install")
param="$1"
shift
case "$param" in
./*)
# install local package
$NEED_SUDO$PKG -U $param $@
;;
*)
$NEED_SUDO$PKG -S $param $@
;;
esac
;;
"upgrade")
$NEED_SUDO$PKG -Syu $@
;;
"force-upgrade")
$NEED_SUDO$PKG -Syyu $@
;;
"remove")
echo suggest to use "purge" or "autopurge"
$NEED_SUDO$PKG -R $@
;;
"purge")
$NEED_SUDO$PKG -Rn $@
;;
"autoremove" | "autopurge")
if [ $# -eq 0 ] ; then
# from https://wiki.archlinuxcn.org/wiki/Pacman/提示和技巧 1.6
$PKG -Qtdq | $NEED_SUDO$PKG -Rns -
elif [ $sub_cmd = "autoremove" ]; then
$NEED_SUDO$PKG -Rcs $@
elif [ $sub_cmd = "autopurge" ]; then
$NEED_SUDO$PKG -Rncs $@
fi
;;
"clean")
$NEED_SUDO$PKG -Sc $@
;;
*)
$PKG $sub_cmd $@
;;
esac