автоматизация скрипта оболочки для чтения всего его ввода из файла вместо клавиатуры

Предположим, у меня есть сценарий оболочки, который принимает данные с клавиатуры. Я хочу записать все входные данные в файл, а затем использовать этот файл для предоставления входных данных для сценария вместо использования клавиатуры. Является ли это возможным? Если да, то как? Заранее спасибо.

1
задан 12 June 2019 в 21:51

2 ответа

Когда

  • вы точно знаете, какая информация нужна программе или сценарию, и
  • вы знаете порядок , в котором необходима информация, и
  • вы не также должны предоставить вход для него с вашего терминала

... тогда это это очень просто. Вы можете просто использовать перенаправление ввода , и достаточно простейшей формы перенаправления ввода.

./script < answers

Замените ./script любой командой, которая фактически запускает программу или скрипт, а answers - путем к пути к файлу, который содержит все входные данные.

(Вы также можете написать это как < answers ./script, если считаете, что это более удобно. В любом случае < предшествует answers - вы даже можете написать <answers - и если у вас есть другие аргументы командной строки, которые должны быть переданы ./script, это нормально.)

Это работает так, что по умолчанию стандартный ввод обычно является терминалом, но вы можете перенаправьте его на любой файл или устройство . Оператор оболочки < перенаправляет стандартный ввод. Для получения более подробной информации и полной истории о перенаправлении см. Перенаправления .


С другой стороны, если вы не знаете, какую информацию будет запрашивать программа или сценарий, - и вам необходимо указать ответы на вопросы, которые могут или не могут быть заданы или могут быть заданы. в любом порядке или могут быть запрошены с важными вариациями - тогда вы захотите написать другой скрипт, который обрабатывает, предоставляя необходимые входные данные. Есть инструменты для автоматизации этого; часто expect является хорошим выбором. Судя по тому, что вы сказали, это не похоже на то, что вам это нужно (Если вы это сделаете, вы должны дать более подробную информацию.)

1
ответ дан 12 June 2019 в 21:51

Я верю, что «здесь строка» может сделать это для вас. Использование: command <<< $WORD. И, конечно же, каждая запись должна быть в отдельной строке, например:

first variable
second variable
third variable 

И простой пример из нижеприведенного сайта:

# Instead of:
if echo "$VAR" | grep -q txt   # if [[ $VAR = *txt* ]]
# etc.

# Try:
if grep -q "txt" <<< "$VAR"
then   #         ^^^
   echo "$VAR contains the substring sequence \"txt\""
fi
# Thank you, Sebastian Kaminski, for the suggestion.

Информация:

  • $WORD: это файл, содержащий информацию, которая должна быть передана команде, в данном случае это файл, содержащий значения, которые должна выполнить команда.

См .: https://www.tldp.org/LDP/abs/html/x17837.html

0
ответ дан 12 June 2019 в 21:51

Другие вопросы по тегам:

Похожие вопросы: