Назад | Перейти на главную страницу

Предоставление аргументов сценарию bash, который использует «чтение», а не $ #

Сценарий bash был предоставлен мне системным администратором, который требует, чтобы я ввел три значения. Значения считываются с использованием «чтения», а не напрямую из командной строки.

echo "Enter value:"
read myValue
echo "Enter value 2:"
read myOtherValue

Три значения, которые я введу, предсказуемы, и мне нужно часто запускать этот сценарий, поэтому я хотел бы автоматизировать его; однако простое выполнение сценария с параметрами в командной строке не работает.

./script.sh myValue myOtherValue

Я могу указать первое значение, если повторю его, а затем передаю скрипту, но это работает только для первого параметра. Я не знаю, как пройти остальные таким образом.

echo "myValue" | ./script.sh

У меня нет доступа для изменения сценария, чтобы просто прочитать аргументы.

Любые идеи?

Если количество входов статическое, вы можете использовать здесь документ:

cat <<FIN | ./script.sh
value1
value2
FIN

Если вы действительно не можете скопировать этот сценарий в свою домашнюю папку и внести изменения в соответствии с вашими потребностями, вам следует изучить файл expect. Expect может читать / записывать stdin / stdout в программу в автоматическом режиме.

Это руководство выглядит достойно: http://www.ftlinuxcourse.com/FTLinuxCourse_Complete-2004/FTLinuxCourse/en/sysadm/chap5_3.html

echo -e "MyValue\nMyOtherValue" | ./script.sh

Похожий на Джеральд Комбс'ответ, вы можете использовать замену и перенаправление процесса:

./script.sh < <(echo -e "myValue\nmyOtherValue")

или

./script.sh < <(echo "myValue
myOtherValue")

или

./script.sh < <(cat <<EOF
myValue
myOtherValue
EOF
)

или даже:

./script.sh < <(echo "myValue"; echo "myOtherValue")

Где вместо двух «эхо» у вас могут быть две разные команды, которые производят выходные данные, необходимые для ввода в сценарий.