Caracteres de controle em um terminal com um processo de primeiro plano ativo

3

Digamos que eu tenha um processo em execução em um terminal em primeiro plano. Enquanto estiver ativo, posso digitar comandos, apertar return, e eles serão executados assim que o processo estiver concluído.

Agora, diga além disso que gostaria de inserir caracteres de controle em vez de apenas letras "normais". Por algum motivo, esses caracteres de controle são repetidos literalmente, mas não interpretados corretamente depois que o processo em primeiro plano termina.

Permita-me ilustrar este problema com um exemplo:

deso@XXX ~ $ sleep 10
echo test
deso@XXX ~ $ echo test
test

Enquanto o sono está ativo, eu digito 'echo test' (seguido de retorno) e ele é executado após 10 segundos. Agora no mesmo terminal que eu faço (esta é a saída literal que vejo):

deso@XXX ~ $ sleep 10
^R
echo
deso@XXX ~ $ echo

deso@XXX ~ $

Minha intenção aqui é invocar o recurso de busca de histórico reverso da linha de leitura enquanto a suspensão está ativa (isso deve encontrar o 'teste de eco' que eu inseri antes). Se o shell estiver aguardando minha entrada, o Ctrl-R realizará esse feito. Com um processo ativo, o Ctrl-R é aparentemente ignorado (pelo menos não inicia a busca reversa do histórico). Isso é tudo no Linux (com xterm + tmux + bash; mas eu tentei sem tmux e com busybox ao invés de bash).

Agora o interessante é que no VMware ESX (que usa busybox, ou seja, ash, como o shell) as coisas funcionam como esperado, ou seja, o caractere de controle não é reproduzido literalmente mas aceito como um caractere de controle e interpretado ( junto com os caracteres restantes) assim que o processo em primeiro plano for concluído. Isso significa que no exemplo acima a pesquisa de histórico teria sido invocada, o último comando 'echo' ('echo test') seria encontrado e seria executado.

Minha pergunta é: quem influencia esse comportamento? O terminal, o shell, o kernel? Existe uma maneira de fazer o Linux se comportar como o ESX nesse aspecto? Como mencionei, tentei o mesmo experimento com diferentes shells (bash & ash) e diferentes emuladores de terminal (xterm & urxvt). O comportamento é sempre o mesmo.

    
por deso 08.05.2017 / 02:17

0 respostas