Terminal
如何模擬通過終端程序發送擊鍵?
我需要將擊鍵虛擬發送到終端程序(如vi或emacs)。
我想做這樣的事情:
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 編寫的perl
,python
但現在類似的perl
模組也python
可以使用。另一種選擇是向
TIOCSTI
您的 tty 設備發出 ioctls 以在其輸入隊列中插入字元(一次一個字節):perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' $'iHello World!\r\e'; vi
這樣做的好處是可以避免在終端仿真器和應用程序之間出現額外的偽終端層(此處
vi
)。