shell脚本有条件地添加apt存储库


8

我想编写一个将添加apt信息库的shell脚本。
我知道我可以使用来做sudo add-apt-repository -y <repo>

我的问题是只有在尚未添加存储库的情况下才能执行此操作,例如:

if repo was not added yet:
  sudo add-apt-repository -y <repo>
  sudo apt-get update

谢谢


add-apt-repository只会添加一次;有趣的部分是apt-get update有条件的。
贝尼·切尔尼亚夫斯基-帕斯金

您甚至尝试过两次添加存储库吗?我刚才所做的是add-apt-repository针对主题的两次,但这仅导致了一个文件/etc/apt/sources/sources.list.d。也许已经进行了检查?
Sergiy Kolodyazhnyy

自从我尝试以来已有一段时间了,但是IIRC重复了存储库列表文件中的这一行
Itay 2016年

Answers:


5

我更改了Itay的功能,使其可以处理多个参数:

add_ppa() {
  for i in "$@"; do
    grep -h "^deb.*$i" /etc/apt/sources.list.d/* > /dev/null 2>&1
    if [ $? -ne 0 ]
    then
      echo "Adding ppa:$i"
      sudo add-apt-repository -y ppa:$i
    else
      echo "ppa:$i already exists"
    fi
  done
}

被这样称呼:

add_ppa webupd8team/atom xorg-edgers/ppa ubuntu-wine/ppa

4
如果您想改善其他答案,请提出修改建议,不要创建新答案。
大卫·佛斯特

5

我最终写了一个函数来处理PPA信息库。

add_ppa() {
  grep -h "^deb.*$1" /etc/apt/sources.list.d/* > /dev/null 2>&1
  if [ $? -ne 0 ]
  then
    echo "Adding ppa:$1"
    sudo add-apt-repository -y ppa:$1
    return 0
  fi

  echo "ppa:$1 already exists"
  return 1
}

我想知道是否还有更优雅的方法。


1

现在可以在添加存储库之前将其删除:

sudo add-apt-repository -r $REPO
sudo add-apt-repository $REPO
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.