Сценарий 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")
Где вместо двух «эхо» у вас могут быть две разные команды, которые производят выходные данные, необходимые для ввода в сценарий.