Как мне написать скрипт установки приложения?

39

Кто-нибудь знает, как написать скрипт оболочки для установки списка приложений? Больно устанавливать каждое приложение вручную каждый раз, когда я настраиваю новую систему.

Изменить: это все еще спрашивает меня Do you want to continue [Y/n]?. Есть ли способ ввода сценария yили не запрашивать ввод?

jumpnett
источник
2
Раньше была программа под названием «да», которая делала именно это. (Он непрерывно писал 'y' в STDOUT.)
Натан Осман,

Ответы:

39

Я бы предположил, что скрипт будет выглядеть примерно так:

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

Просто сохраните это как что-то вроде install_my_apps.sh, измените свойства файла, чтобы сделать его исполняемым, и запустите его из командной строки от имени пользователя root.

( Edit: The -yговорит вам apt-getне предлагать и просто приступить к установке)

mac9416
источник
Как сделать его исполняемым? Я предполагаю, что запустил бы это как: sudo ./install_my_apps.sh
jumpnett
Я не уверен, нужно ли сделать его исполняемым (я парень из Python; не слишком много в BASH). Но если это необходимо, его можно сделать исполняемым с помощью chmod +x ./install_my_apps.sh.
Майкл Креншоу
Или щелкните правой кнопкой мыши на нем, выберите «Свойства». В открывшемся окне перейдите на вкладку «Разрешения» и установите флажок «Разрешить выполнение файла как программы»
jfoucher
6
Я не знаю, почему это CW, но я все равно отредактировал его, чтобы поставить -yфлаг. Примечание: если вы хотите, чтобы это выглядело более четко, вы можете использовать --yesили --assume-yesвместо -y.
Уманг
20

Ну, в соответствии с вашим вопросом самый простой сценарий будет:

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

aptitude update
aptitude install -y $LIST_OF_APPS

Однако вы также можете войти aptitude update && aptitude install -y a b c d e. Так что, возможно, ваш вопрос здесь упущен. Если есть какие-то дополнительные требования, было бы неплохо их объяснить.

QBi
источник
1
Обратите внимание, что apt-get будет работать здесь как замена для aptitude, если это ваши предпочтения. Просто замените оба экземпляра «aptitude» на «apt-get».
Майкл Креншоу
12

Просто создайте список приложений в файле example.list и запустите

cat example.list | xargs sudo apt-get -y install
Эндрю Ганнерсон
источник
это круто. никогда не знал, как передать список пакетов в apt!
Thufir
xargs передает переданные по конвейеру строки в любую команду, просто добавляя их в качестве аргументов
Xerus,
2

Я бы выбрал следующий скрипт: vim install

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

Тогда я должен сделать вышеуказанный скрипт исполняемым chmod +x install. Затем , чтобы использовать его, я мог бы набрать: ./install <package_name>. Пример:./install clang

NlightNFotis
источник
1
Я хотел все программы, перечисленные в файле. С этим методом мне все равно придется вводить имя программы в качестве аргумента командной строки, так что в этом нет никакой пользы.
Jumpnett
1
@jumpnett Lol, я пропустил пункт списка. Я начинаю испытывать недостаток в кофеине, и это показывает. Извините за это. Может обновить ответ.
NlightNFotis
Кроме того, он будет работать updateдля каждой программы для установки, отнимает много времени. И это нужно sudo.
Готье
это крайне ненужно. С таким же успехом вы можете вставить alias install='sudo apt-get install -y'в свой.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
Йордан Георгиев
источник
1
пожалуйста, добавьте объяснения и исправьте все эти опечатки
Xerus
какая линия по вашему мнению нуждается в объяснении ?!
Джордан Георгиев