Bagaimana cara saya menulis skrip pemasangan aplikasi shell?

39

Adakah yang tahu cara menulis skrip shell untuk menginstal daftar aplikasi? Sungguh menyakitkan harus menginstal setiap aplikasi dengan tangan setiap kali saya membuat sistem baru.

Sunting: Masih bertanya kepada saya Do you want to continue [Y/n]?. Apakah ada cara untuk mendapatkan input skrip yatau untuk tidak meminta input?

jumpnett
sumber
2
Dulu ada program yang disebut 'ya' yang melakukan hal itu. (Ini menulis 'y' terus menerus ke STDOUT.)
Nathan Osman

Jawaban:

39

Saya akan menganggap skrip akan terlihat seperti ini:

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install <package name> -y
#etc.

Simpan saja itu sebagai sesuatu seperti install_my_apps.sh, ubah properti file untuk membuatnya dapat dieksekusi, dan jalankan dari baris perintah sebagai root.

( Edit: The -ymemberitahu apt-getuntuk tidak meminta Anda dan hanya melanjutkan menginstal)

mac9416
sumber
Bagaimana cara membuatnya bisa dieksekusi? Saya berasumsi saya akan menjalankannya seperti: sudo ./install_my_apps.sh
jumpnett
Saya tidak yakin apakah perlu untuk membuatnya dapat dieksekusi (saya orang Python; tidak banyak ke BASH). Tetapi jika Anda harus, itu dapat dibuat dapat dieksekusi dengan chmod +x ./install_my_apps.sh.
Michael Crenshaw
Atau klik kanan padanya, pilih "Properties". Di jendela yang terbuka buka tab "Izin", dan centang kotak yang bertuliskan "Izinkan mengeksekusi file sebagai program"
jfoucher
6
Saya tidak tahu mengapa ini CW, tapi saya tetap mengeditnya untuk memasang -ybendera. Catatan: Jika Anda ingin membuatnya lebih jelas, Anda dapat menggunakan --yesatau --assume-yesmenggantikannya -y.
Umang
20

Menurut pertanyaan Anda, skrip termudah adalah:

#!/bin/sh
LIST_OF_APPS="a b c d e"

aptitude update
aptitude install -y $LIST_OF_APPS

Namun Anda juga bisa masuk aptitude update && aptitude install -y a b c d e. Jadi mungkin pertanyaan Anda tidak ada pada poin krusial di sini. Jika ada beberapa persyaratan lebih lanjut, alangkah baiknya menjelaskannya.

qbi
sumber
1
Perhatikan bahwa apt-get akan berfungsi sebagai pengganti drop-in untuk aptitude di sini, jika itu adalah preferensi Anda. Cukup ganti kedua instance "aptitude" dengan "apt-get".
Michael Crenshaw
12

Cukup buat daftar aplikasi dalam file, example.list, dan jalankan

cat example.list | xargs sudo apt-get -y install
Andrew Gunnerson
sumber
ini luar biasa. tidak pernah tahu cara memberi makan daftar paket ke apt sebelumnya!
Thufir
xargs memberi makan saluran pipa ke perintah apa pun, hanya dengan menambahkannya sebagai argumen
Xerus
2

Saya akan memilih skrip berikut: vim install

#!/bin/bash
apt-get update  # To get the latest package lists
apt-get install $1 -y

Maka saya harus membuat skrip di atas dieksekusi chmod +x install. Kemudian untuk menggunakannya, saya bisa ketik: ./install <package_name>. Contoh:./install clang

NlightNFotis
sumber
1
Saya ingin semua program tercantum dalam file. Dengan metode ini, saya masih harus memasukkan nama program sebagai argumen baris perintah, jadi sebenarnya tidak ada manfaatnya.
jumpnett
1
@jumpnett Lol, saya melewatkan titik daftar. Saya mulai kekurangan kafein dan itu menunjukkan. Maaf untuk itu Dapat memperbarui jawabannya.
NlightNFotis
Plus itu akan berjalan updateuntuk setiap program untuk menginstal, memakan waktu. Dan itu perlu sudo.
Gauthier
ini sangat tidak perlu. Anda mungkin juga memasukkan alias install='sudo apt-get install -y'ke dalam.bash_aliases
Xerus
-1
#!/bin/bash

set -eu -o pipefail # fail on error , debug all lines

sudo -n true
test $? -eq 0 || exit 1 "you should have sudo priveledge to run this script"

echo installing the must-have pre-requisites
while read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"
    perl
    zip unzip
    exuberant-ctags
    mutt
    libxml-atom-perl
    postgresql-9.6
    libdbd-pgsql
    curl
    wget
    libwww-curl-perl
EOF
)

echo installing the nice-to-have pre-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
echo -e "\n"
sleep 6

sudo apt-get install -y tig
Yordan Georgiev
sumber
1
tambahkan penjelasan dan perbaiki semua kesalahan ketik ini
Xerus
baris mana yang menurut Anda perlu penjelasan ?!
Yordan Georgiev