Предположим, у меня есть сценарий оболочки, который принимает данные с клавиатуры. Я хочу записать все входные данные в файл, а затем использовать этот файл для предоставления входных данных для сценария вместо использования клавиатуры. Является ли это возможным? Если да, то как? Заранее спасибо.
Когда
... тогда это это очень просто. Вы можете просто использовать перенаправление ввода , и достаточно простейшей формы перенаправления ввода.
./script < answers
Замените ./script
любой командой, которая фактически запускает программу или скрипт, а answers
- путем к пути к файлу, который содержит все входные данные.
(Вы также можете написать это как < answers ./script
, если считаете, что это более удобно. В любом случае <
предшествует answers
- вы даже можете написать <answers
- и если у вас есть другие аргументы командной строки, которые должны быть переданы ./script
, это нормально.)
Это работает так, что по умолчанию стандартный ввод обычно является терминалом, но вы можете перенаправьте его на любой файл или устройство . Оператор оболочки <
перенаправляет стандартный ввод. Для получения более подробной информации и полной истории о перенаправлении см. Перенаправления .
С другой стороны, если вы не знаете, какую информацию будет запрашивать программа или сценарий, - и вам необходимо указать ответы на вопросы, которые могут или не могут быть заданы или могут быть заданы. в любом порядке или могут быть запрошены с важными вариациями - тогда вы захотите написать другой скрипт, который обрабатывает, предоставляя необходимые входные данные. Есть инструменты для автоматизации этого; часто expect
является хорошим выбором. Судя по тому, что вы сказали, это не похоже на то, что вам это нужно (Если вы это сделаете, вы должны дать более подробную информацию.)
Я верю, что «здесь строка» может сделать это для вас. Использование: 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
: это файл, содержащий информацию, которая должна быть передана команде, в данном случае это файл, содержащий значения, которые должна выполнить команда.