Ich möchte ein Skript erstellen, das eine neue PPA hinzufügt oder überspringt, wenn es bereits installiert ist.
Jemand hat diese Lösung auf eine andere Frage gestellt:
#!/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
}
Shell-Skript zum bedingten Hinzufügen eines passenden Repositorys
In meinem Fall möchte ich hinzufügen ppa:otto-kesselgulasch/gimp-edge
, bin mir aber nicht sicher, wo ich dies im Skript hinzufügen soll.
Ich habe es versucht, add_ppa(ppa:otto-kesselgulasch/gimp-edge)
aber es wird immer wieder die Fehlermeldung angezeigt ( ppa
lautet der Name meines Skripts):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
Ich habe es auch mit einem Leerzeichen zwischen ppa und ohne () versucht
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Kann mir bitte jemand sagen, was ich falsch mache?
Antworten:
Das ist eine Bash-Funktion, und um Argumente an Bash-Funktionen zu übergeben, brauchen Sie keine
()
. Außerdem fügt die Funktionppa:
ihren Argumenten das Präfix hinzu , sodass genau dies ausreichen würde:Darüber hinaus unterstützt die Funktion mehrere Argumente, sodass Sie sie für mehrere PPAs ausführen können:
Wenn Sie die Funktion in ein Skript eingefügt haben, sollten Sie entweder:
Verwenden Sie einfach den Inhalt der Funktion als Skript:
Und das ruft das Skript mit dem ppa-Namen auf:
quelle
in "$@"
;for i; do
Schleifen über die Positionsparameter.Ich denke, Sie führen die Datei als Skript aus, aber es ist nur eine Funktionsdefinition, sodass die Funktion beim Ausführen nie aufgerufen wird.
Sie müssen nichts hinzufügen. Sie müssen die PPA nirgendwo hinzufügen. Sie können
source
die Datei und dann die Funktion in der aktuellen Shell aufrufen:(Angenommen, die Datei, in der Sie sie gespeichert haben, heißt
ppa
, befindet sich im aktuellen Arbeitsverzeichnis und hat genau den gleichen Inhalt wie das von Ihnen veröffentlichte Beispiel.)Sie können es auch als Skript ausführen, wenn Sie eine Zeile hinzufügen, die die Funktion tatsächlich aufruft. Sie können die PPA fest codieren, indem Sie am Ende eine Zeile wie die folgende hinzufügen:
und führen Sie dann das Skript aus. Auf diese Weise müssten Sie die Datei jedes Mal bearbeiten, wenn Sie eine neue PPA hinzufügen möchten ...
Stattdessen können Sie die Funktion für alle an das Skript übergebenen Argumente aufrufen, indem Sie eine Zeile wie die folgende hinzufügen:
dann, wenn das Skript aufgerufen wird:
quelle
Es sieht so aus, als hätten Sie möglicherweise einen Tippfehler in Ihrem Skript gemacht, insbesondere bei der Definition der
add_ppa
Funktion.Die Fehlermeldung:
Gibt an, dass add_ppa nicht als Funktion erkannt wird.
Es scheint, dass Sie
(
anstelle von{
bei der Definition der Funktion verwendet haben. Korrigieren Sie diesen Fehler und die Funktion sollte korrekt funktionieren, obwohl sie wie in Murus Antwort angegeben verwendet werden sollte .quelle