Saya ingin membuat skrip yang akan menambah PPA baru atau lewati jika sudah diinstal.
Seseorang memposting solusi ini ke pertanyaan lain:
#!/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 script untuk menambahkan repositori apt secara kondisional
Dalam kasus saya, saya ingin menambahkan ppa:otto-kesselgulasch/gimp-edge
, tetapi saya tidak yakin di mana saya harus menambahkan ini dalam skrip.
Saya mencoba add_ppa(ppa:otto-kesselgulasch/gimp-edge)
tetapi saya terus mendapatkan pesan kesalahan ( ppa
adalah nama skrip saya):
ppa: 1: ppa: Syntax error: word unexpected (expecting ")")
Saya juga mencoba dengan spasi di antara ppa dan tanpa ()
ppa: 1: ppa: add_ppa: not found
ppa: 12: ppa: Syntax error: "}" unexpected
Adakah yang bisa memberitahu saya apa yang saya lakukan salah?
Jawaban:
Itu adalah fungsi bash, dan untuk meneruskan argumen ke fungsi bash, Anda tidak perlu
()
. Selain itu, fungsi menambahkanppa:
awalan ke argumennya, jadi ini bisa dilakukan:Selain itu, fungsi ini mendukung beberapa argumen, sehingga Anda dapat menjalankannya untuk beberapa PPA:
Karena Anda telah memasukkan fungsi dalam skrip, Anda harus:
cukup gunakan isi fungsi sebagai skrip:
Dan panggil skrip dengan nama ppa:
sumber
in "$@"
;for i; do
loop atas parameter posisi.Saya pikir Anda mengeksekusi file sebagai skrip, tapi itu hanya definisi fungsi, jadi fungsinya tidak pernah dipanggil saat dijalankan.
Anda tidak perlu menambahkan apa pun padanya; Anda tidak perlu menambahkan PPA di mana pun di dalamnya. Anda dapat
source
file dan kemudian memanggil fungsi di shell saat ini:(dengan asumsi file tempat Anda menyimpannya disebut
ppa
, ada di direktori kerja saat ini, dan memiliki konten yang persis sama dengan contoh yang Anda posting)Anda juga bisa menjalankannya sebagai skrip, jika Anda menambahkan baris yang benar-benar memanggil fungsi. Anda bisa memasukkan kode PPA ke dalamnya dengan menambahkan baris seperti ini di akhir:
dan kemudian jalankan skrip. Namun demikian, Anda harus mengedit file setiap kali Anda ingin menambahkan PPA baru ...
Alih-alih, Anda dapat memanggil fungsi pada semua argumen yang diteruskan ke skrip dengan menambahkan baris seperti ini:
maka saat skrip dipanggil:
sumber
Sepertinya Anda mungkin membuat kesalahan ketik pada skrip Anda, khususnya pada definisi
add_ppa
fungsi.Pesan kesalahan:
Menunjukkan bahwa add_ppa tidak dikenali sebagai fungsi.
Tampaknya Anda mungkin telah menggunakannya
(
untuk{
mendefinisikan fungsi. Perbaiki kesalahan ini dan fungsinya harus bekerja dengan benar, meskipun harus digunakan seperti yang ditunjukkan dalam jawaban muru .sumber