Я хотел бы создать сценарий, который добавит новый 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
}
сценарий оболочки для условного добавления способного репозитория
В моем случае я хотел бы добавить 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
Кто-либо может сказать мне, что я делаю неправильно?
Это - функция удара, и передать аргументы для избиения функций, Вам не нужно ()
. Кроме того, функция добавляет ppa:
префикс к его аргументам, поэтому просто это сделало бы:
add_ppa otto-kesselgulasch/gimp-edge
Кроме того, функция поддерживает несколько аргументов, таким образом, можно выполнить ее для нескольких PPAs:
add_ppa otto-kesselgulasch/gimp-edge foo/bar a/b
Учитывая, что Вы поместили функцию в сценарий, Вы должны также:
просто используйте содержание функции как сценарий:
#! /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
И вызов сценарий с именем ppa:
ppa otto-kesselgulasch/gimp-edge
Я думаю, что Вы выполняете файл как сценарий, но это - только функциональное определение, таким образом, функция никогда не вызывается, когда он выполняется.
Вы ничего не должны добавлять к нему; Вы не должны добавлять PPA нигде в нем. Вы можете source
файл и затем вызывает функцию в текущей оболочке:
. ppa
add_ppa otto-kesselgulasch/gimp-edge
(принятие файла, в котором Вы сохранили его, называют ppa
, находится в текущем рабочем каталоге и имеет точно то же содержание как пример, который Вы отправили),
Вы могли также выполнить его как сценарий, если Вы добавляете строку, которая на самом деле вызывает функцию. Вы могли твердый код PPA в него путем добавления строки как это в конце:
add_ppa otto-kesselgulasch/gimp-edge
и затем запущенный скрипт. Но тот путь, необходимо было бы отредактировать файл каждый раз, когда Вы хотели добавить новый PPA...
Вместо этого можно вызвать функцию на всех аргументах, переданных сценарию путем добавления строки как это:
add_ppa "$@"
затем, когда сценарий называют:
./ppa otto-kesselgulasch/gimp-edge thing/stuff etc/andSoOn
Похоже, что Вы, возможно, сделали опечатку в своем сценарии, конкретно в определении add_ppa
функция.
Сообщение об ошибке:
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Указывает, что add_ppa не распознается как функция.
Кажется, что Вы, возможно, использовали (
вместо {
при определении функции. Исправьте эту ошибку, и функция должна работать правильно, хотя она должна использоваться, как обозначено в ответе muru.