Để cung cấp câu trả lời tự động, bạn có thể sử dụng một trong các cách sau:
insaller.sh < an_input_file
hoặc là
command-line | installer.sh
Có một điều cần chú ý nếu installer.sh
tập lệnh đang sử dụng read -p
, như trong ví dụ dưới đây:
read -p "Press ENTER for default path or enter path to install software:" answer
man bash
xác định rằng không có gì được in nếu đầu vào tiêu chuẩn không phải là thiết bị đầu cuối.
Nếu đây là tình huống của bạn, thì bạn có thể thử điều kỳ lạ này:
( sleep 30 ; printf "/my/own/path\n" ) | insaller.sh
Bạn nên điều chỉnh số giây ( 30
trong ví dụ trên) với tình huống của bạn.
Nếu nó xảy ra read -p
không được sử dụng trong tập lệnh cài đặt, thì bạn có thể thử GNU
giải pháp này :
tempdir="$(mktemp -d)"
mkfifo "${tempdir}"/input
touch "${tempdir}"/output.log
./installer.sh <"${tempdir}"/input >"${tempdir}"/output.log 2>&1 &
installerpid=$!
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log | ( fgrep -q "Press ENTER for default path or enter path to install software:"; printf "/new/path\n" ) >> "${tempdir}"/input &
# ... do stuff
# before ending the script, just wait that all background processes stop
wait
rm -f "${tempdir}"/input "${tempdir}"/output.log
Ý tưởng là sử dụng 2 dòng lệnh nền, một cho kịch bản cài đặt và một để chờ lời nhắc và cung cấp câu trả lời.
Một ống có tên ( input
) và một tệp thông thường ( output.log
) được sử dụng để liên lạc.
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log
in các dòng như được viết trong output.log
tập tin. Nó tạm thời khi tập lệnh cài đặt kết thúc.
( fgrep -q ... ; printf .. ) >> ...input
: chặn cho đến khi tìm thấy dấu nhắc và cung cấp đường dẫn mới tới tập lệnh cài đặt.