Você precisaria definir começa lá.
Você pode inserir as seqüências de caracteres enviados pelo seu terminal ao pressionar F3
no buffer de entrada do dispositivo terminal antes executando seu programa com o TIOCSTI ioctl () em alguns sistemas como o Linux:
{
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
program
}
Ou você pode usar algo como expect
para rodar seu programa em uma camada de terminal falsificada, espere que ele gere algum prompt (ou qualquer indicação de que ele é iniciado até o ponto que você espera para), e enviar essa saída então:
expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'
(aqui esperando um prompt >
, substitua por alguma string que program
produz quando estiver pronto para ler entrada).
Você também pode substituir seu stdin por um pipe, mas se esse aplicativo espera coisas como pressionamentos de teclas F3 , é mais provável que seja um aplicativo interativo, então provavelmente não vai gostar quando o stdin não for um terminal . Você pode sempre tentar:
tput kf3 | program
No entanto, depois que program
ler a saída de tput
, verá o final do arquivo (nada mais para ser lido), o que pode fazer com que ele saia. Com:
{ tput kf3; cat; } | program
Enviamos a saída de kf3
e usamos cat
para encaminhar tudo o que você digita no terminal para program
. Então, novamente, é improvável que funcione como o mais provável program
colocaria o terminal em um modo onde a entrada é enviada assim que você digita e desabilita o echo
que ele não pode mais fazer como sua entrada não é o terminal.
Você pode e faz a mesma configuração:
saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"