我需要在程式啟動後立即發送標準輸入或鍵碼。
例如
$ program | F3
答案1
你需要定義開始那裡。
F3
當您按下終端設備輸入緩衝區時,您可以插入終端發送的字元序列前在 Linux 等某些系統上使用 TIOCSTI ioctl() 運行程式:
{
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
program
}
或者您可以使用類似的方法expect
在偽造的終端層中運行您的程序,等待它輸出一些提示(或任何表明它是開始了直到您期望的程度),然後發送該輸出:
expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'
(這裡期待一個提示,替換為準備好讀取輸入時輸出的>
一些字串)。program
您也可以將其標準輸入替換為管道,但如果該應用程式需要F3按鍵之類的操作,那麼它很可能是一個互動式應用程序,因此當它的標準輸入不是終端時,它可能會不喜歡它。無論如何,你總是可以嘗試:
tput kf3 | program
然而,在program
讀取 的輸出後tput
,它將看到檔案結尾(沒有更多內容可讀取),這可能會導致它退出。和:
{ tput kf3; cat; } | program
我們發送 的輸出kf3
,然後用於cat
將您在終端上輸入的所有內容轉發到program
。話又說回來,它不太可能工作,因為很可能program
會將終端置於一種模式,在這種模式下,只要您鍵入並禁用它就echo
無法再執行的操作,因為它的輸入不是終端。
您可以自己做同樣的設定:
saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"