Isso é normalmente o que expect foi escrito para:
expect -c 'spawn -noecho vi; send "iHello World!\r"; interact'
Embora expect tenha sido escrito para o TCL nos dias anteriores a perl ou python sendo popular, agora módulos semelhantes para perl ou python também estão disponíveis.
Outra opção é emitir TIOCSTI ioctls para seu dispositivo tty para inserir caracteres (um byte de cada vez) em sua fila de entrada:
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV
' $'iHello World!\r\e'; vi
Isso tem o benefício de evitar uma camada extra de pseudo-terminal entre o emulador de terminal e o aplicativo (aqui vi ).