Попробуйте так:
./LinuxConfigurationScript.sh -r us-east-1 <<EOF
command 1
command 2
EOF
Хорошо, давайте сделаем полный пример:
Вот мой первый скрипт test.sh
, который задает несколько вопросов (ваш LinuxConfigurationScript.sh
эквивалент)
read -p "Question 1?" ans
echo $ans
read -p "Question 2?" ans
echo $ans
read -p "Question 3?" ans
echo $ans
read -p "Question 4?" ans
echo $ans
Вот мой второй скрипт test2. sh
, который вызывает первый и отвечает на все вопросы:
./test.sh <<EOF
answer 1
answer 2
answer 3
answer 4
EOF
И альтернатива в одну строку:
{ echo "answer 1"; echo "answer 2"; echo "answer 3"; echo "answer 4"; } | ./test.sh
Причина этого шаблона в том, что сценарии сопровождающего в пакетах Debian обычно начинаются с set -e
, что приводит к завершению работы оболочки, как только любая команда (строго говоря, конвейерная, список или составная команда) завершается с ненулевым статусом. Это гарантирует, что ошибки не накапливаются: как только что-то пойдет не так, сценарий прерывается.
В случаях, когда команда в сценарии может завершиться ошибкой, добавляется || true
гарантирует, что результирующая составная команда всегда завершается с нулевым статусом, поэтому сценарий не прерывается. Например, удаление каталога не должно быть фатальной ошибкой (предотвращающей удаление пакета); поэтому мы будем использовать
rmdir ... || true
, поскольку rmdir
не имеет возможности указать ему игнорировать ошибки.
Хотя это не влияет на вывод только что запущенной программы, оно позволяет вызывающему абоненту действовать так, как будто все в порядке, иначе говоря, влияет на будущую логику.
Перефразируя: маскирует ошибку статус предыдущей команды.
michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false
michael@x071:[/usr/sbin]cat /tmp/true.sh
#!/bin/sh
false || true
michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $?
0