使用apt-get和yum安装的通用bash脚本

 每天进步一点就好 发布于 2023-01-30 17:33

我正在尝试编写一个简单的bash包装器,将其摘要yumapt-get。基本上,所以我们可以做类似universal-install curl以下的事情:

# universal-install
package=$1
apt=`command -v apt-get`
yum=`command -v yum`

if [ -n "$apt" ]; then
    apt-get update
    apt-get -y install $package
elif [ -n "$yum" ]; then
    yum -y install $package
else
    echo "Err: no path to apt-get or yum" >&2;
    exit 1;
fi

是否可以进行任何错误或改进/优化?

1 个回答
  • 看一下pacapt如何检测操作系统:

    # Detect package type from /etc/issue
    _found_arch() {
      local _ostype="$1"
      shift
      grep -qis "$*" /etc/issue && _OSTYPE="$_ostype"
    }
    
    # Detect package type
    _OSTYPE_detect() {
      _found_arch PACMAN "Arch Linux" && return
      _found_arch DPKG   "Debian GNU/Linux" && return
      _found_arch DPKG   "Ubuntu" && return
      _found_arch YUM    "CentOS" && return
      _found_arch YUM    "Red Hat" && return
      _found_arch YUM    "Fedora" && return
      _found_arch ZYPPER "SUSE" && return
    
      [[ -z "$_OSTYPE" ]] || return
    
      # See also https://github.com/icy/pacapt/pull/22
      # Please not that $OSTYPE (which is `linux-gnu` on Linux system)
      # is not our $_OSTYPE. The choice is not very good because
      # a typo can just break the logic of the program.
      if [[ "$OSTYPE" != "darwin"* ]]; then
        _error "Can't detect OS type from /etc/issue. Running fallback method."
      fi
      [[ -x "/usr/bin/pacman" ]]           && _OSTYPE="PACMAN" && return
      [[ -x "/usr/bin/apt-get" ]]          && _OSTYPE="DPKG" && return
      [[ -x "/usr/bin/yum" ]]              && _OSTYPE="YUM" && return
      [[ -x "/opt/local/bin/port" ]]       && _OSTYPE="MACPORTS" && return
      command -v brew >/dev/null           && _OSTYPE="HOMEBREW" && return
      [[ -x "/usr/bin/emerge" ]]           && _OSTYPE="PORTAGE" && return
      [[ -x "/usr/bin/zypper" ]]           && _OSTYPE="ZYPPER" && return
      if [[ -z "$_OSTYPE" ]]; then
        _error "No supported package manager installed on system"
        _error "(supported: apt, homebrew, pacman, portage, yum)"
        exit 1
      fi
    }
    

    如您所见,它首先检查/etc/issue,然后让脚本为每个程序包管理器寻找关联的可执行文件。

    但是,为什么不使用pacapt而不是自己动手?

    2023-01-30 17:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有