Я хотел бы создать скрипт, который будет добавлять новый 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
}
скрипт оболочки для условного добавления репозитория apt
В моем случае я хотел бы добавить ppa:otto-kesselgulasch/gimp-edge
, но я не уверен, где я должен добавить это в сценарий.
Я пытался, add_ppa(ppa:otto-kesselgulasch/gimp-edge)
но получаю сообщение об ошибке ( ppa
это имя моего сценария):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
Я также пробовал с пробелом между PPA и без ()
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Может кто-нибудь сказать мне, что я делаю не так, пожалуйста?
Ответы:
Это функция bash, и для передачи аргументов функциям bash вам не нужно
()
. Кроме того, функция добавляетppa:
префикс к своим аргументам, так что просто это будет делать:Кроме того, функция поддерживает несколько аргументов, поэтому вы можете запустить ее для нескольких PPA:
Учитывая, что вы поместили функцию в скрипт, вы должны либо:
просто используйте содержимое функции как скрипт:
И вызовите скрипт с именем ppa:
источник
in "$@"
;for i; do
зацикливается на позиционных параметрах.Я думаю, что вы выполняете файл как скрипт, но это только определение функции, поэтому функция никогда не вызывается при запуске.
Вам не нужно ничего добавлять к этому; Вам не нужно добавлять PPA где-либо внутри него. Вы можете
source
файл и затем вызвать функцию в текущей оболочке:(при условии, что файл, в котором вы его сохранили, называется
ppa
, находится в текущем рабочем каталоге и имеет точно такое же содержимое, как и пример, который вы опубликовали)Вы также можете запустить его как скрипт, если добавите строку, которая фактически вызывает функцию. Вы можете жестко закодировать PPA в нем, добавив в конце следующую строку:
и затем запустите скрипт. Но в этом случае вам придется редактировать файл каждый раз, когда вы захотите добавить новый PPA ...
Вместо этого вы можете вызвать функцию для всех аргументов, передаваемых в скрипт, добавив строку, подобную этой:
тогда когда скрипт вызывается:
источник
Похоже, что вы могли сделать опечатку в вашем сценарии, в частности, в определении
add_ppa
функции.Сообщение об ошибке:
Указывает, что add_ppa не распознается как функция.
Похоже, что вы могли использовать
(
вместо{
при определении функции. Исправьте эту ошибку и функция должна работать правильно, хотя она должна быть использована , как указано в Муру в ответ .источник