Me gustaría crear un script que agregará un nuevo PPA o se saltará si ya está instalado.
Alguien publicó esta solución a una pregunta diferente:
#!/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
}
script de shell para agregar condicionalmente el repositorio apt
En mi caso, me gustaría agregar ppa:otto-kesselgulasch/gimp-edge
, pero no estoy seguro de dónde se supone que debo agregar esto en el script.
Lo intenté add_ppa(ppa:otto-kesselgulasch/gimp-edge)
pero sigo recibiendo un error que dice ( ppa
es el nombre de mi script):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
También probé con un espacio entre ppa y sin el ()
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
¿Alguien puede decirme qué estoy haciendo mal, por favor?
Respuestas:
Esa es una función bash, y para pasar argumentos a las funciones bash, no es necesario
()
. Además, la función agrega elppa:
prefijo a sus argumentos, por lo que esto sería suficiente:Además, la función admite múltiples argumentos, por lo que puede ejecutarla para múltiples PPA:
Dado que ha puesto la función en un script, debería:
solo use el contenido de la función como script:
Y la llamada al script con el nombre de ppa:
fuente
in "$@"
;for i; do
recorre los parámetros posicionales.Creo que está ejecutando el archivo como un script, pero es solo una definición de función, por lo que la función nunca se llama cuando se ejecuta.
No necesita agregarle nada; no necesita agregar el PPA en ningún lugar dentro de él. Puede
source
archivar y luego llamar a la función en el shell actual:(suponiendo que el archivo en el que lo guardó se llama
ppa
, está en el directorio de trabajo actual y tiene exactamente el mismo contenido que el ejemplo que publicó)También puede ejecutarlo como un script, si agrega una línea que realmente llama a la función. Puede codificar el PPA en él agregando una línea como esta al final:
y luego ejecuta el script. Pero de esa manera, tendría que editar el archivo cada vez que quisiera agregar un nuevo PPA ...
En su lugar, puede llamar a la función en todos los argumentos pasados al script agregando una línea como esta:
entonces cuando se llama el script:
fuente
Parece que puede haber cometido un error tipográfico en su script, específicamente en la definición de la
add_ppa
función.El mensaje de error:
Indica que add_ppa no se reconoce como una función.
Parece que puede haber utilizado
(
en lugar de{
al definir la función. Corrija este error y la función debería funcionar correctamente, aunque debería usarse como se indica en la respuesta de muru .fuente