Glu*_*ate 2 command-line ppa software-sources
Ubuntu 提供了一个简单的 GUI 界面,允许您编辑、(取消)激活和删除 PPA。
但是浏览所有的 GUI 对话框和菜单有时会很乏味,尤其是当您的系统中添加了大量 PPA 时。
这就是为什么我想知道是否有办法从命令行禁用(和启用)PPA。
注意:我不是在谈论添加/删除 PPA(这很容易做到:sudo add-apt-repository ppa/ sudo add-apt-repository --remove ppa)。我正在寻找的是一种暂时禁用 PPA 并随意重新启用它的方法 - 所有这些都来自 CLI。
编辑:
Sushantp606 和 Davidson Chua 的回答是一个很好的起点,让我改变了问题的范围。知道可以使用sources.list文件管理存储库当然很好,但这对我来说仍然是一项非常乏味的任务。我很想知道是否有办法以与软件属性窗口相同的方式自动执行此操作。
理想情况下,我想找到一个命令,可以通过其 PPA 地址快速启用和禁用 PPA,例如:
ppa_activate ppa:synapse-core/ppa
Run Code Online (Sandbox Code Playgroud)
和
ppa_deactivate ppa:synapse-core/ppa
Run Code Online (Sandbox Code Playgroud)
ppa 信息实际上保存在/etc/apt/sources.list. 这是执行所需操作以停用或激活所需存储库的代码。将下面给出的代码保存在一个文件中,比如mod-ppa
#!/bin/bash
mydir=/etc/apt/sources.list.d
function getlist(){
echo -e "\n\tchose one of the following lists"
echo -e "\t================================"
for itm in `seq 1 $1`
do
echo -e "\t`echo $2 | awk -v x=$itm '{print $x}' | awk -F/ '{print $NF}'`"
done
}
if [ $# -lt 1 ]
then
echo "E: mod_ppa: missing operand"
echo "Try 'mod_ppa --help' for more information."
exit 0
elif [ $# -lt 2 ]
then
echo -e "E: syntax error,\nTry 'mod_ppa --help' for more information."
exit 0
fi
case "$1" in
-d )
ppa=`ls $mydir/$2*.list`
num=`echo $ppa | wc -w`
if [ `echo $num` -gt 1 ]
then
getlist "$num" "$ppa"
else
if [ -e $mydir/$2*.list ]
then
sed -i "s/^deb\-src/\#deb\-src/" $ppa
sed -i "s/^deb\ http/\#deb\ http/" $ppa
else
echo "E: ppa does not exist/check ppa name"
fi
fi
;;
-a )
ppa=`ls $mydir/$2*.list`
num=`echo $ppa | wc -w`
if [ `echo $num` -gt 1 ]
then
getlist "$num" "$ppa"
else
if [ -e $mydir/$2*.list ]
then
sed -i "s/^\#deb\-src/deb\-src/" $ppa
sed -i "s/^\#deb\ http/deb\ http/" $ppa
else
echo "E: ppa does not exist/check ppa name"
fi
fi
;;
--help)
echo "Usage: mod_ppa [OPTION] [PPA NAME'S INITIAL PART]"
echo "Mandatory argument options."
echo "-a Activate certain ppa"
echo "-d Deactivate certain ppa"
;;
* )
echo "mod_ppa: invalid option '$1'"
echo "Try 'mod_ppa --help' for more information."
;;
esac
Run Code Online (Sandbox Code Playgroud)
将脚本保存在 中/home/<username>/bin/,通常在 PATH 中。检查写入终端
echo $PATH
Run Code Online (Sandbox Code Playgroud)
如果没有,请/home/<username>/bin/通过添加以下行.bash_profile或.bashrc以方便的方式添加到 PATH ,
export PATH=$PATH:$HOME/bin
Run Code Online (Sandbox Code Playgroud)
然后获取文件,在终端中写入
source .bash_profile [or source .bashrc]
Run Code Online (Sandbox Code Playgroud)
赋予mod_ppa执行权限,在终端中写入
chmod +x mod_ppa
Run Code Online (Sandbox Code Playgroud)
要停用 ppa 使用
sudo mod_ppa -d <ppa_name's_initial_part>
Run Code Online (Sandbox Code Playgroud)
例如,停用ppa:webupd8team/java使用
sudo mod_ppa -d webupd8team
Run Code Online (Sandbox Code Playgroud)
要激活 ppa 使用
sudo mod_ppa -a <ppa_name's_initial_part>
Run Code Online (Sandbox Code Playgroud)
例如,要激活ppa:synapse-core使用
sudo mod_ppa -a synapse-core
Run Code Online (Sandbox Code Playgroud)
帮助
mod_ppa --help
Run Code Online (Sandbox Code Playgroud)
我假设您不会对停用 中列出的基本和默认 ppa(s) 感兴趣/etc/apt/sources.list。无论如何,只有少数,如果您愿意,可以手动停用它们。Sushantp606 的回答很有帮助。
这个怎么运作
当使用软件中心 (GUI) 停用任何 ppa 存储库时,它实际上会#在相应 ppa.list文件中的所有行前面放置/etc/apt/sources.list.d/. 通常大多数.list文件包含两行以deb http和开头deb-src,少数只有一行。上面的脚本使用sed. 首先它检查ppa .list(由用户输入)是否存在。然后相应地在行#前放置或删除 a 。
由于脚本应该处理操作系统的某些敏感部分,因此我尝试对其进行防御性编码。保持检查传递给脚本的参数并相应地设置一些错误消息。还增加了一个小help。这些部分增加了代码的长度。