Кто-нибудь знает, как написать сценарий оболочки для установки списка приложений? Мне очень больно устанавливать каждое приложение вручную каждый раз, когда я настраиваю новую систему.
Редактировать:Он все еще спрашивает меня Do you want to continue [Y/n]?. Есть ли способ получить ввод скрипта y или для того, чтобы он не запрашивал ввод?
Я бы предположил, что сценарий будет выглядеть примерно так:
#!/bin/shapt-get update # To get the latest package listsapt-get install <package name> -y#etc.
Просто сохраните это как что-то вроде install_my_apps.sh , измените свойства файла, чтобы сделать его исполняемым, и запустите его из командной строки от имени root.
(Редактировать: То -y говорит apt-get не для того, чтобы подсказывать вам, а просто продолжайте установку)
Что ж, согласно вашему вопросу, самым простым сценарием будет:
#!/bin/shLIST_OF_APPS="a b c d e"aptitude updateaptitude install -y $LIST_OF_APPS
Однако вы также можете ввести aptitude update && aptitude install -y a b c d e. Так что, возможно, в вашем вопросе здесь не хватает самого важного момента. Если есть какие-то дополнительные требования, было бы неплохо объяснить их.
#!/bin/bashapt-get update # To get the latest package listsapt-get install $1 -y
Затем я должен сделать приведенный выше скрипт исполняемым chmod +x install. Затем, чтобы использовать его, я мог бы ввести: ./install <package_name>. Пример: ./install clang
#!/bin/bashset -eu -o pipefail # fail on error and report it, debug all linessudo -n truetest $? -eq 0 || exit 1 "you should have sudo privilege to run this script"echo installing the must-have pre-requisiteswhile 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-perlEOF)echo installing the nice-to-have pre-requisitesecho you have 5 seconds to proceed ...echo orecho hit Ctrl+C to quitecho -e "\n"sleep 6sudo apt-get install -y tig
Объяснение:
set -eu -o pipefail команда:
Командные элементы
Объяснение
set
Измените способ работы среды оболочки
-u
Если переменная не существует, сообщите об ошибке и остановитесь (например, несвязанная переменная).
-e
Завершается всякий раз, когда возникает ошибка (например, команда не найдена)
-o pipefail
Если подкоманда завершается с ошибкой, вся команда конвейера завершается с ошибкой, завершая сценарий (например, команда не найдена)
Если этот скрипт обнаружит какие-либо ошибки, он завершится с ошибкой и завершится.
Создайте цикл while, т.е. выполняйте заданный набор команд до бесконечности до тех пор, пока заданное условие не будет оценено как true
read
Считайте строку из стандартного ввода и сохраняйте ее в переменной
-r
Опция, переданная в read команда, которая избегает обратной косой черты, не интерпретируется
p
Произвольная переменная для read для сохранения захваченных входных данных. Здесь он представляет каждый пакет, который будет установлен
;
Оператор управления И. Переходите к следующей команде и выполняйте ее независимо от статуса завершения предыдущей команды (выполняйте, даже если предыдущая команда завершилась неудачно)
Считывайте данный файл построчно вечно или до получения значения "false", затем переходите к следующей команде.
done < <(cat << "EOF" <list of packages> EOF) команда:
Командные элементы
Объяснение
done
Зарезервированное слово, используемое для разграничения последовательности команд, которые предшествуют. например, stop
<
Перенаправление на стандартный ввод
cat
Соединять. используется для просмотра, создания и добавления файлов
<<
Перенаправление, которое считывает входные данные из текущего источника до тех пор, пока не встретит разделитель, а затем использует эти строки в качестве стандартного ввода для команды
EOF
Конец разделителя файлов
cat << EOF-EOF
Это позволит прочитать, а затем распечатать все, что заключено в EOF блок
<(list)
Получите выходные данные списка; круглые скобки указывают, что список будет выполняться в среде подоболочки
Прочитайте список пакетов и соберите их в качестве стандартных входных данных. Перенаправить его на read команда, которая фиксирует его как p переменную, а затем отправляет ее в $p переменная, которая позволяет ей выполняться с помощью install команду, и когда она достигнет EOF разделитель, перенаправьте вывод на done эффективное прекращение while read петля.