Як написати сценарій оболонки для встановлення програми?


39

Хтось знає, як написати скрипт оболонки, щоб встановити список програм? Боляче встановлювати кожен додаток вручну кожного разу, коли я встановлюю нову систему.

Редагувати: Це все ще запитує мене Do you want to continue [Y/n]?. Чи є спосіб ввести сценарійy чи не вимагати введення?


2
Раніше була програма під назвою "так", яка робила саме це. (Він постійно писав "у" на STDOUT.)
Натан Осман,

Відповіді:


39

Я припускаю, що сценарій виглядатиме приблизно так:

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

Просто збережіть це як щось на зразок install_my_apps.sh, змініть властивості файлу, щоб зробити його виконуваним, і запустіть його з командного рядка як корінь.

( Edit:-y каже apt-getне підказувати був вам і просто отримати за допомогою параметра)


Як зробити його виконуваним? Я припускаю, що я би запустив це так: 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. Тож, можливо, у вашому запитанні тут відсутній вирішальний момент. Якщо є якісь додаткові вимоги, було б непогано пояснити їх.


1
Зауважте, що apt-get буде працювати заміною можливостей тут, якщо це вам подобається. Просто замініть обидва екземпляри "здатності" на "apt-get".
Майкл Креншо

12

Просто створіть список програм у файлі example.list та запустіть

cat example.list | xargs sudo apt-get -y install

Це круто. ніколи раніше не знав, як подати список пакунків в apt раніше!
Туфір

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


1
Я хотів, щоб всі програми, перелічені у файлі. За допомогою цього методу мені все одно доведеться вводити назву програми як аргумент командного рядка, тому дійсно користі немає.
jumpnett

1
@jumpnett Лол, я пропустив список. Мені починають бракувати кофеїну, і це показує. Вибачте за це. Може оновити відповідь.
NlightNFotis

Плюс це буде працювати updateдля встановлення кожної програми, що займає багато часу. І це потрібно sudo.
Готьє

це вкрай непотрібно. Ви також alias install='sudo apt-get install -y'можете .bash_aliases
вписати

-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
додайте пояснення, будь ласка, і виправте всі ці помилки
Ксерус

який рядок, на вашу думку, потребує пояснення ?!
Йордан Георгієв

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.