#batch-file #ubuntu #ubuntu-12.04
#пакетный файл #ubuntu #ubuntu-12.04
Вопрос:
Предположим, у меня есть набор команд, которые должны выполняться в терминале Ubuntu: например:
sudo apt-get update
sudo install xrdp
sudo install java
.....
и многие другие.
Возможно ли в Ubuntu выполнить файл, содержащий эти команды, и выполнить без вмешательства человека (например, да / нет), по умолчанию да?
Я попытался установить wine, выполнив команды $ wine cmd / c .bat , после ввода всех этих команд в файл .bat, но получил ошибки «Приложение пыталось создать окно, но не удалось загрузить драйвер». Итак, есть ли какой-либо простой способ выполнения серии команд в ubuntu?
Комментарии:
1. Серьезно, чувак? Что, черт возьми, вы курили, чтобы получить такую замысловатую идею, как «эх, я собираюсь установить Wine, чтобы я мог запускать файлы .bat». В вашей системе есть прекрасно работающая оболочка. Возможно, даже целый вариант. Они намного мощнее, чем вызываемая оболочка wannabee cmd.exe (есть причина, по которой существует настоящая оболочка для Windows под названием PowerShell, вдохновленная оболочками Unix и Linux).
2. @datenwolf Я не читал эту часть вопроса. хе-хе! 🙂
Ответ №1:
То, о чем вы говорите — несколько команд в одном файле — называется «shellscript».
Допустим, у вас есть commands.sh
:
sudo apt-get update
sudo install xrdp
sudo install java
Затем вы могли бы выполнять команды с помощью:
bash commands.sh
Вы также можете создать из него непосредственно исполняемый shellscript, используя так называемый shebang
механизм.
Поместите эту строку в самый верх (строка 1) commands.sh
#!/bin/bash
.. и сделайте файл исполняемым:
chmod x commands.sh
Теперь вы можете выполнить это напрямую:
./commands.sh
Если вы хотите ответить «да» на все вопросы, вы можете использовать yes
команду:
yes | bash "file_with_commands.sh"
Комментарии:
1. Что, если у меня есть команда, для которой требуется пароль вместо пароля, т.Е. команда svn
2. Они запросят этот пароль, как если бы вы ввели их вручную в терминале
Ответ №2:
Не нужно делать что-то запутанное и безумное, как попытка сделать cmd.exe работа. У вас уже есть прекрасно работающая оболочка в вашей системе. Также вам нужно понимать, что делают подобные программы sudo
.
sudo
это не какое-то волшебное заклинание, которое что-то позволяет. sudo
это вспомогательная программа, которая позволяет запускать программу с повышенными правами. Вместо цепочки sudo this
sudo that
вы можете просто позволить sudo запустить оболочку и передать скрипт со всеми этими командами в оболочку.
Поворот
sudo apt-get update sudo install xrdp sudo install java
В
sudo sh -c 'apt-get update ; install xrdp ; install java'
Однако это выглядит неправильно. Я думаю, что вы изначально хотели написать
sudo apt-get update
sudo apt-get install xrdp
sudo apt-get install java
Вы можете сократить это до
sudo apt-get update
sudo apt-get install xrdp java
Или в объединенной оболочке single liner
sudo sh -c 'apt-get update ; apt-get install xrdp java'
Теперь относительно вопросов «Да» / «Нет». Если программа, которую вы хотите запустить без присмотра, не предлагает опции для предоставления ответа по умолчанию, вы можете использовать yes
программу. Даже если он назван yes
, он также может ответить «НЕТ» или что угодно:
narfi /home/dw
1007 ~ % yes Hello
Hello
Hello
Hello
Hello
Hello
…
Как это работает? Существует концепция, называемая «Стандартный ввод / вывод», из которой программы считывают входные данные и записывают выходные данные. Оболочки позволяют перенаправлять вывод из одной программы на ввод другой. Это называется конвейеризацией. Специальный символ |
обозначает канал в оболочках.
Итак, допустим, у вас есть программа, которая хочет видеть большое количество Aye
входных данных, вы могли бы выполнить следующий вызов оболочки
yes Aye | happypirate
Таким образом, вы можете объединить это с apt-get, чтобы дать всем ответам «да» по умолчанию
yes | apt-get install …
Однако это вызывает неправильное дерево. Взгляните на параметры вызова apt-get:
~ % apt-get --help
apt 0.9.7.6 for amd64 compiled on Oct 16 2012 18:23:06
Usage: apt-get [options] command
apt-get [options] install|remove pkg1 [pkg2 ...]
apt-get [options] source pkg1 [pkg2 ...]
apt-get is a simple command line interface for downloading and
installing packages. The most frequently used commands are update
and install.
…
-y Assume Yes to all queries and do not prompt <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
…
apt-get дает вам возможность автоматически отвечать «да» на все ИТ-вопросы. Аккуратно, не так ли? Обратите внимание, что другие программы могут использовать разные клавиши выбора, поэтому вам рекомендуется всегда читать их подробные руководства (RTFM).
Комментарии:
1. 1 За объяснение того, что многие команды, которые обычно запрашивают подтверждение, также имеют опцию командной строки, позволяющую пропустить это подтверждение — как
apt-get
. Да, если у них есть такая опция, ее следует использовать.
Ответ №3:
На самом базовом уровне вы хотите запустить скрипт. Вы делаете это, создавая файл, подобный этому:
#!/bin/bash
sudo apt-get update
sudo install xrdp
sudo install java
Сохраните это как файл с именем go
, затем в терминале вам нужно сделать его исполняемым следующим образом:
chmod x go
Затем вы можете запустить его, набрав:
./go
Если ваша программа ожидает ответа «да» на первый вопрос, а затем «нет» на следующий вопрос, вы можете заранее подготовить ответы таким образом и отправить их в программу:
( echo yes; echo no ) | sudo apt-get update