Onde os caracteres são digitados em um terminal salvo?

3

Usando o xterm e o bash 4.3 do (pseudo-) terminal pts / 10, digitamos (█ é o cursor):

test@debian:~$ ps
  PID TTY          TIME CMD
13128 pts/10   00:00:02 bash
21037 pts/10   00:00:00 ps
test@debian:~$ ls
Mail  directory  file
test@debian:~$ ls directory
file1  file2  file3
test@debian:~$ ls █

(como você vê, existe um espaço depois de ls )

Então, a partir de outro terminal, enviamos um backspace:

test@debian:~$ echo -ne "\b" > /dev/pts/10

No terminal pts / 10, temos agora:

test@debian:~$ ls█

Digamos directory , então temos:

test@debian:~$ lsdirectory█

Pressionando o retorno, obtemos o "diretório" listado:

file1  file2  file3
test@debian:~$ █

É claro que normalmente inserir lsdirectory nos daria um erro "comando não encontrado". Em algum lugar o espaço foi salvo. Onde?

    
por wolf-revo-cats 19.01.2016 / 22:02

1 resposta

6

O editor da linha de comando do seu shell salvou o espaço. De fato, salvou todos os caracteres que você digitou que compunham a linha de comando.

Gostaria de saber se você tem a impressão de que o shell sabe qual comando executar lendo o conteúdo da tela antes de executar o comando. Esse não é o caso. Além disso, os terminais não fornecem necessariamente nenhum método de leitura do conteúdo da tela, portanto, o shell não poderia contar com a capacidade de fazer isso, mesmo que quisesse.

Além disso, você deve ter cuidado com vários aplicativos usando o mesmo terminal ao mesmo tempo. Neste caso, seu shell está executando seu editor de linha de comando no seu terminal e você fez um eco no mesmo terminal de outro lugar. Seu shell não tem idéia de que você fez isso e a idéia do seu shell da posição do cursor agora está fora de sincronia com o local onde o cursor está na tela. Isso pode confundir e corromper a capacidade do seu shell de exibir a linha de comando corretamente. Se você editar a linha de comando usando as teclas de seta e a conclusão de tabulação baseada em menu e tal, seu shell vai querer mover o cursor e exibir novamente partes da linha de comando, mas comete erros porque o cursor não está onde pensa é.

    
por 19.01.2016 / 22:07