我想创建一个脚本来添加新的 PPA 或跳过(如果已经安装)。
有人将此解决方案发布到另一个问题:
#!/bin/bash
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
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我想添加ppa:otto-kesselgulasch/gimp-edge
,但我不确定应该在脚本中的何处添加它。
我试过了,add_ppa(ppa:otto-kesselgulasch/gimp-edge)
但我一直收到错误消息(ppa
是我的脚本名称):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
我也试过在 ppa 和没有 () 之间有一个空格
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?
这是一个 bash 函数,要将参数传递给 bash 函数,您不需要()
. 此外,该函数将ppa:
前缀添加到其参数中,因此只需这样做:
add_ppa otto-kesselgulasch/gimp-edge
Run Code Online (Sandbox Code Playgroud)
此外,该函数支持多个参数,因此您可以为多个 PPA 运行它:
add_ppa otto-kesselgulasch/gimp-edge foo/bar a/b
Run Code Online (Sandbox Code Playgroud)
鉴于您已将该函数放入脚本中,您应该:
只需使用函数的内容作为脚本:
#! /bin/bash
for i in "$@"; do
if grep -Rq "^deb.*$i" /etc/apt/sources.list.d/*.list
then
echo "Adding ppa:$i"
sudo add-apt-repository -y ppa:$i
else
echo "ppa:$i already exists"
fi
done
Run Code Online (Sandbox Code Playgroud)
并使用 ppa 名称调用脚本:
ppa otto-kesselgulasch/gimp-edge
Run Code Online (Sandbox Code Playgroud)我认为您正在将文件作为脚本执行,但它只是一个函数定义,因此在运行时永远不会调用该函数。
你不需要添加任何东西;您无需在其中的任何位置添加 PPA。您可以source
文件,然后在当前 shell 中调用该函数:
. ppa
add_ppa otto-kesselgulasch/gimp-edge
Run Code Online (Sandbox Code Playgroud)
(假设您保存的文件名为ppa
,位于当前工作目录中,并且与您发布的示例具有完全相同的内容)
如果添加实际调用该函数的行,您也可以将其作为脚本运行。您可以通过在末尾添加这样的行来将 PPA 硬编码到其中:
add_ppa otto-kesselgulasch/gimp-edge
Run Code Online (Sandbox Code Playgroud)
然后运行脚本。但是那样的话,每次你想添加一个新的 PPA 时,你都必须编辑文件......
相反,您可以通过添加如下一行来调用传递给脚本的所有参数的函数:
add_ppa "$@"
Run Code Online (Sandbox Code Playgroud)
然后当脚本被调用时:
./ppa otto-kesselgulasch/gimp-edge thing/stuff etc/andSoOn
Run Code Online (Sandbox Code Playgroud)