代码:

代码:

我经常使用终端将 PPA 添加到我的资源列表中,但事后才发现 PPA 不支持我的 Ubuntu 版本。结果出现了错误:

404  Not Found

我如何通过终端检查要添加的 ppa 是否支持我的 Ubuntu 版本?

答案1

更新

该脚本现在检查 ppa 是否支持您的发行版,然后询问您是否要将 repo 添加到您的源列表中,然后才安装软件包。

使用此产品需您自担风险!我只在两个 ppa 上测试过!对于损坏的软件包,我不承担任何责任!

代码:

#!/bin/bash


#-----------------------------------------------
#   Author      :   Imri Paloja
#   Email       :   ****.******@*****.***
#   HomePage    :   www.eurobytes.nl
#   Version     :   3.0
#   Name        :   add-ppa
#----------------------------------------------- 

# CHANGELOG
# 
# 1. Asks for confirmation if ppa supports distro.

mkdir /tmp/add-ppa/

wget --quiet "http://ppa.launchpad.net/$(echo $1 | sed -e 's/ppa://g')/ubuntu/dists" -O /tmp/add-ppa/support.html

grep "$(lsb_release -sc)" "/tmp/add-ppa/support.html" >> /tmp/add-ppa/found.txt

cat /tmp/add-ppa/found.txt | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' >> /tmp/add-ppa/stripped_file.txt

if [[ -s /tmp/add-ppa/stripped_file.txt ]] ; then

echo "$(lsb_release -sc) is supported"


read -p "Do you wish to install add the ppa to your source, and install the binaries [y/n] ?"
if [ "$REPLY" == "y" ] ; then

echo "Adding it to your sources list"
sudo add-apt-repository $1

echo "Refreshing your sources list"
sudo apt-get update 

# Searching for the needed files, and installing them

wget --quiet "http://ppa.launchpad.net/$(echo $1 | sed -e 's/ppa://g')/ubuntu/dists/$(lsb_release -sc)/main/binary-amd64/Packages" -O /tmp/add-ppa/packages.html

grep "Package:" "/tmp/add-ppa/packages.html" >> /tmp/add-ppa/packages.txt

cat /tmp/add-ppa/packages.txt | sed ':a;N;$!ba;s/\n/ /g' >> /tmp/add-ppa/packages_stripped_file.txt

cat /tmp/add-ppa/packages_stripped_file.txt | sed 's|Package:||g' >> /tmp/add-ppa/packages_stripped_file2.txt

sudo apt-get install $(grep -vE "^\s*#" /tmp/add-ppa/packages_stripped_file2.txt  | tr "\n" " ")

else
 exit 0
fi

else

echo "$(lsb_release -sc) is not supported"

fi;

#Cleanup

rm -r /tmp/add-ppa/

用法:

不支持 ppa

./support.sh ppa:m-gehre/ppa
saucy is not supported

支持 ppa

./support.sh ppa:banshee-team/ppa
saucy is supported
Do you wish to add the ppa to your sources list, and install the binaries [y/n] ??

Adding it to your sources list
...
Refreshing your sources list
...
sudo apt-get install
....

查看脚本的实际效果:

改进了它。原始答案来自维尔夫

答案2

一个用于尝试为您的发行版使用 PPA 的 bash 脚本:

我刚刚学了一些 bash为你哈哈。效果很好,我很自豪(并感谢 Wilf 的回答)

#!/bin/bash
# usage : bash myscript ppa:something/something

# get list of ppa's supported distribution
wget http://ppa.launchpad.net/$(echo $1 | sed -e 's/ppa://g')/ubuntu/dists -O /tmp/test-ppa.tmp -q

# check if your release is in the downloaded list
RELEASE=`cat /tmp/test-ppa.tmp | grep $(lsb_release -sc)`
if [[ -n "$RELEASE" ]] ; then 
    echo "$1 will work with $(lsb_release -si) $(lsb_release -sr) $(lsb_release -sc)"
else 
    echo "$1 won't work with $(lsb_release -si) $(lsb_release -sr) $(lsb_release -sc)"
fi

# cleaning
rm /tmp/test-ppa.tmp

用法 :

1)将其复制到某个文本文件中(在下面的例子中是~/myscript

2)使用命令:

bash myscript ppa:something/something 

注意:您也可以将该脚本复制到/usr/bin/文件夹 sudo cp ~/myscript /usr/bin/ppa-test && sudo chmod +x /usr/bin/ppa-test 直接在命令行中使用

ppa-test ppa:something/something


例子 :

(这里我用的是:ppa:libreoffice/ppa〜/ myscript

ppa 检查

编辑:更新了 blade19899 的使用想法lsb_release

答案3

我没有测试过,但是像这样的脚本应该可以工作:

#!/bin/bash
echo "http://ppa.launchpad.net/$(echo $1 | sed -e 's/ppa://g')/ubuntu/dists"

您必须这样运行它./SCRIPTNAME ppa:WHATEVER/WHATEVER- 这个命令行也可以工作,但是您必须插入 PPA 名称(在哪里ppa:gnome3-team/gnome3):

echo "http://ppa.launchpad.net/$(echo ppa:gnome3-team/gnome3 | sed -e 's/ppa://g')/ubuntu/dists"

然后,您可以在终端中打开链接(某些终端会自动显示可点击的链接),或使用 运行它curl以将其下载为文本。它应该只显示 ppa 支持的版本的文件夹列表。

我最近添加了一个 ppa,因此我查看了它以及软件和更新内容并做出了猜测......

答案4

好吧,我可能有一个 GUI 解决方案给你!对我来说最好的方法是 PPA Manager:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

当您添加 ppa 或系统中已添加的 ppa 时,打开 PPA 管理器并单击管理 ppa,它将带您进入新窗口,其中包含系统中的 ppa 列表,单击任何 ppa 并选择list packages以下内容,如果有任何可用的软件包,它将列出,如果没有,您可以删除它。对我来说,昨天甚至有用,我有 Saucy 和 Trusty 的 ppa,所以列表包显示“0”,我删除了它 :)

相关内容