Выполнение команд последовательно в терминале Ubuntu

#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