Um eine automatische Antwort bereitzustellen, können Sie eine der folgenden Methoden verwenden:
insaller.sh < an_input_file
oder
command-line | installer.sh
Es gibt etwas zu beachten, wenn das installer.sh
Skript verwendet wird read -p
, wie im folgenden Beispiel:
read -p "Press ENTER for default path or enter path to install software:" answer
man bash
Gibt an, dass nichts gedruckt wird, wenn der Standardeingang kein Terminal ist.
Wenn dies Ihre Situation ist, können Sie diese seltsame Sache ausprobieren:
( sleep 30 ; printf "/my/own/path\n" ) | insaller.sh
Sie sollten die Anzahl der Sekunden ( 30
im obigen Beispiel) an Ihre Situation anpassen.
Wenn es vorkommt, dass read -p
es nicht im Installationsskript verwendet wird, können Sie diese GNU
Lösung ausprobieren :
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
Die Idee ist, zwei Hintergrundbefehlszeilen zu verwenden, eine für das Installationsskript und eine, um auf die Eingabeaufforderung zu warten und die Antwort bereitzustellen.
Für die Kommunikation werden eine Named Pipe ( input
) und eine reguläre Datei ( output.log
) verwendet.
tail --pid=$installerpid -fn 1 "${tempdir}"/output.log
druckt Zeilen so, wie sie in der output.log
Datei geschrieben sind. Es wird angezeigt, wenn das Installationsskript beendet wird.
( fgrep -q ... ; printf .. ) >> ...input
: blockiert, bis die Eingabeaufforderung gefunden wird, und gibt den neuen Pfad zum Installationsskript an.