Terminal

如何模擬通過終端程序發送擊鍵?

  • November 25, 2017

我需要將擊鍵虛擬發送到終端程序(如viemacs)。

我想做這樣的事情:

echo -e 'iHello, world!\e' | vi

然後用這個緩衝區打開一個vi會話:

Hello, world!
~
~
~
~
~

但這不起作用,因為vi不通過stdin讀取擊鍵。

我收到此錯誤:

ex/vi: Vi's standard input and output must be a terminal

如何將一些文本字元串發送到終端程序,就好像該字元串是直接在鍵盤上鍵入的一樣?

這通常expect是為了:

expect -c 'spawn -noecho vi; send "iHello World!\r\33"; interact'

雖然expect在流行之前幾天是為 TCL 編寫的perlpython但現在類似perl模組也python可以使用。

另一種選擇是向TIOCSTI您的 tty 設備發出 ioctls 以在其輸入隊列中插入字元(一次一個字節):

perl -le 'require "sys/ioctl.ph";
         ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV
        ' $'iHello World!\r\e'; vi

這樣做的好處是可以避免在終端仿真器和應用程序之間出現額外的偽終端層(此處vi)。

引用自:https://unix.stackexchange.com/questions/238228