Ich schreibe die Installation von Software auf einem HP-UX-Server. Sobald das Skript gestartet ist, werden Sie aufgefordert, den Installationspfad einzugeben. Ich muss den Pfad zum Skript übergeben, damit es weiter ausgeführt werden kann. Es gibt nur eine Stelle im Skript, an der dieser Bedarf besteht.
Die Eingabeaufforderung des Skripts lautet: Drücken Sie die EINGABETASTE für den Standardpfad oder geben Sie den Pfad ein, um die Software zu installieren:
Ich möchte den Standardpfad nicht verwenden, daher muss ich einen neuen Pfad eingeben. Aber dieses Skript wird im Hintergrund ausgeführt und ich muss den Pfad angeben. Ich bin mir der genauen Antwort in Skriptform nicht sicher.
shell-script
background-process
input
37Scheper
quelle
quelle
Antworten:
Sie können Ihre Antwort mithilfe einer Pipe in die Standardeingabe des Skripts übertragen.
quelle
Wenn Sie beim Starten des Skripts alle Eingaben bereitstellen können, leiten Sie die Eingaben des Programms um. Das heißt, anstatt zu rennen
/path/to/installer
, laufenoder verwenden Sie ein hier Dokument :
Wenn Sie von Zeit zu Zeit mit einem Programm interagieren möchten, Ihr Terminal jedoch für andere Zwecke dazwischen verwenden möchten , führen Sie das Programm in einem Terminal-Multiplexer wie Screen oder tmux aus . Starten Sie mit screen eine Sitzung, indem Sie ausführen
screen
, und starten Sie dann das Programm. Um etwas anderes zu tun, drücken Sie Ctrl+ A, cum ein zweites Fenster zu erstellen, und dann Ctrl+ A, num zwischen den Fenstern zu navigieren. Zum Verlassen Bildschirm aber lassen Sie das Programm läuft, drücken Sie Ctrl+ A, d( „detach“). Führen Sie Folgendes aus, um zur vorhandenen Bildschirmsitzung zurückzukehrenscreen -rd
(screen
ohne Option würde eine neue Sitzung gestartet).quelle
Um eine automatische Antwort bereitzustellen, können Sie eine der folgenden Methoden verwenden:
oder
Es gibt etwas zu beachten, wenn das
installer.sh
Skript verwendet wirdread -p
, wie im folgenden Beispiel: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:
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 dieseGNU
Lösung ausprobieren :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 deroutput.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.quelle