Ich muss direkt nach dem Programmstart eine Standardeingabe oder einen Tastencode senden.
Zum Beispiel
$ program | F3
Antwort1
Sie müssen definierenbeginntDort.
Sie können die Zeichenfolgen, die Ihr Terminal sendet, wenn Sie F3
in den Eingabepuffer des Endgeräts drücken, einfügen.VorAusführen Ihres Programms mit TIOCSTI ioctl() auf einigen Systemen wie Linux:
{
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
program
}
Oder Sie können etwas wie verwenden, expect
um Ihr Programm in einer gefälschten Terminalebene auszuführen, warten Sie, bis es eine Eingabeaufforderung ausgibt (oder einen Hinweis darauf, dass esgestartetbis zu dem Punkt, an dem Sie es erwarten) und senden Sie diese Ausgabe dann:
expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'
(hier wird eine >
Eingabeaufforderung erwartet. Ersetzen Sie diese durch eine Zeichenfolge, die program
ausgegeben wird, wenn die Eingabe zum Lesen bereit ist.)
Sie können auch den Standardeingabeeingang durch eine Pipe ersetzen, aber wenn diese Anwendung Dinge wie F3Tastendrücke erwartet, handelt es sich höchstwahrscheinlich um eine interaktive Anwendung, und sie wird es wahrscheinlich nicht mögen, wenn der Standardeingabeeingang kein Terminal ist. Sie können es trotzdem jederzeit versuchen:
tput kf3 | program
Wenn jedoch program
die Ausgabe von gelesen wurde tput
, wird das Dateiende angezeigt (es gibt nichts mehr zu lesen), was dazu führen kann, dass das Programm beendet wird. Mit:
{ tput kf3; cat; } | program
Wir senden die Ausgabe von kf3
und cat
leiten dann alles, was Sie auf dem Terminal eingeben, an program
weiter. Andererseits ist es unwahrscheinlich, dass es funktioniert, da die meisten program
das Terminal wahrscheinlich in einen Modus versetzen würden, in dem die Eingabe gesendet wird, sobald Sie tippen, und deaktivieren würden, echo
was nicht mehr möglich ist, da seine Eingabe nicht das Terminal ist.
Sie könnten die gleiche Einstellung auch selbst vornehmen:
saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"