Chciałbym utworzyć skrypt, który doda nowy PPA lub pominie, jeśli jest już zainstalowany.
Ktoś opublikował to rozwiązanie na inne pytanie:
#!/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
}
skrypt powłoki, aby warunkowo dodać apt repository
W moim przypadku chciałbym dodać ppa:otto-kesselgulasch/gimp-edge
, ale nie jestem pewien, gdzie mam to dodać w skrypcie.
Próbowałem, add_ppa(ppa:otto-kesselgulasch/gimp-edge)
ale wciąż ppa
pojawia się komunikat o błędzie ( nazwa mojego skryptu):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
Próbowałem również ze spacją między ppa i bez ()
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Czy ktoś może mi powiedzieć, co robię źle, proszę?
Odpowiedzi:
To jest funkcja bash, a do przekazywania argumentów do funkcji bash nie potrzebujesz
()
. Ponadto funkcja dodajeppa:
przedrostek do swoich argumentów, więc wystarczyłoby to:Dodatkowo funkcja obsługuje wiele argumentów, więc możesz uruchomić ją dla wielu PPA:
Ponieważ umieściłeś tę funkcję w skrypcie, powinieneś albo:
wystarczy użyć zawartości funkcji jako skryptu:
I wywołaj skrypt o nazwie ppa:
źródło
in "$@"
;for i; do
zapętla parametry pozycyjne.Myślę, że plik jest wykonywany jako skrypt, ale jest to tylko definicja funkcji, więc funkcja nigdy nie jest wywoływana po uruchomieniu.
Nie musisz niczego do niego dodawać; nie musisz dodawać PPA w dowolnym miejscu w nim. Możesz
source
plik, a następnie wywołać funkcję w bieżącej powłoce:(zakładając, że plik, w którym został zapisany, jest wywoływany
ppa
, znajduje się w bieżącym katalogu roboczym i ma dokładnie taką samą treść jak w opublikowanym przykładzie)Możesz również uruchomić go jako skrypt, jeśli dodasz wiersz, który faktycznie wywołuje funkcję. Możesz na stałe zakodować PPA, dodając na końcu taką linię:
a następnie uruchom skrypt. Ale w ten sposób będziesz musiał edytować plik za każdym razem, gdy chcesz dodać nowy PPA ...
Zamiast tego możesz wywołać funkcję na wszystkich argumentach przekazanych do skryptu, dodając taką linię:
wtedy, gdy skrypt jest wywoływany:
źródło
Wygląda na to, że mogłeś napisać literówkę w skrypcie, szczególnie przy definicji
add_ppa
funkcji.Komunikat o błędzie:
Wskazuje, że add_ppa nie jest rozpoznawany jako funkcja.
Wygląda na to, że użyłeś go
(
zamiast{
podczas definiowania funkcji. Popraw ten błąd, a funkcja powinna działać poprawnie, chociaż powinna być używana zgodnie ze wskazaniami w odpowiedzi muru .źródło