x/公共/包管.zsh

55 lines
1.8 KiB
Bash

#!/usr/bin/zsh
# 路径名称: 公共/包管.zsh
# 脚本作用: 统一不同发行版中预制的不同的包管理的功能
# 当前支持的包管理器有: apt yum pacman
# 可实现的功能有 `包管_更新` `包管_安装` `包管_搜索`
# 第一作者: 寻觅(xunmiemail@vip.qq.com)
# 创建时间: 2024年2月5日11:25:00
# 使用方法: 在言灵根目录下使用`. 公共/包管.zsh`
# 启动言灵包管理模块的标识符
言灵一包管=1
# 调用当前包管理器检查和更新
# 参数 [ -n --no-update -不更 ] 携带此参数为仅检查更新
# 参数 [ -y -确认 ] 跳过包管理器更新时的二次确认
# 实例 `包管_更新 -n`; `包管_更新 -确认`
包管一更新() {
if [ -x "$(command -v oma)" ]; then
# sudo oma refresh
sudo oma update -y
elif [ -x "$(command -v apt)" ]; then
sudo apt-get update -qq
elif [ -x "$(command -v yum)" ]; then
sudo yum update
elif [ -x "$(command -v pacman)"]; then
sudo pacman -Syu
fi
}
# 调用当前包管理器的安装模块
包管一安装(){
[ -x "$(command -v $1)" ] && return 0
if [ -x "$(command -v oma)" ]; then
# 解决oma找不到软件包返回值还是0的问题, 先搜索一下软件包
# 神奇的oma居然不走标准输出(2>&1, 将错误输出重定向到标准输出, 方便管道符处理), 坑人啊
sudo oma search $1 2>&1 | head -n 1 | grep -q '\[完整匹配\]' || return 1
sudo oma install -y $1
elif [ -x "$(command -v apt)" ]; then
sudo apt -y install $1
elif [ -x "$(command -v yum)" ]; then
sudo yum install -y $1
elif [ -x "$(command -v pacman)" ]; then
sudo pacman -Sy --needed $1
else
return 1
fi
}
# 默认会尝试使用 apt-file pkgfile 等第三方搜索工具, 未找到第三方搜索工具时尝试使用包管理器自带搜索模块
# 参数 [ -n --no-file -原版 ]
包管一搜索() {
}