2016-04-08 3 views
2

Ich habe diesen Befehl command, dass zu einem bestimmten Zeitpunkt zurückgibt: Press Enter to continue.Shell: Schreiben Sie ein Skript, das auf Stdin ausgeführt wird warten

Ich möchte ein Skript schreiben, das command aufruft, liest die so weit Befehlsausgabe, tut etwas damit, wenn Press Enter to continue ankommt, und simuliert eine Eingabetaste, wenn das getan wird.

Jede Chance, die ich erreichen kann? :-D

Etwas wie:

myscript | command > output 

mit myscript

#!/bin/bash 

cp output output2 # output2 should only contain the output until Press Enter to continue 
echo -ne '\n' 

außer es nicht funktioniert! :-)

+1

'Echo-ne '\ n'' ist erstaunlich bizarr. Das ist effektiv das gleiche wie "Echo" nur weniger portabel und mehr zu tippen und zu lesen. –

+0

Das sagte, was über diesen Versuch nicht funktioniert? Wird die Aufforderung nicht bestätigt? Wird die Aufforderung direkt von der Standardeingabe oder vom tty gelesen? Ich habe auch das bisschen über die Ausgabedatei nicht verstanden. Sie möchten die Ausgabedatei direkt vor dem Drücken von "Enter" kopieren? –

+3

Suchen Sie nach einem Tutorial zum 'expect' Programm? (UND es ist unklar, was Sie meinen mit "Ich habe diesen Befehl'> Befehl '". Ist das '>' die Eingabeaufforderung cmd? Wenn ja, müssen Sie es nicht einschließen. Wenn gemeint, Dateiumleitung anzuzeigen, bist du Erstellen oder Löschen der Datei 'command' in Ihrem aktuellen Verzeichnis). Bitte versuchen Sie, einen kleinen, reproduzierbaren Testfall zu erstellen, dem wir folgen können. Viel Glück. – shellter

Antwort

1

Idealerweise sollten Sie expect Befehl verwenden, um das zu erreichen, Beispielcode:

#!/usr/bin/expect 
set timeout 600 
spawn command 
expect "Press Enter to continue" { send "\r" } 

Hinweis: Ersetzen Sie command mit Ihrem Befehl.

dann speichern Sie es in das Skript, machen es ausführbar und führen Sie es aus.

Überprüfen Sie: man expect für weitere Informationen.

Auf OS X installieren über: brew install expect.

Verwandte Themen