Estou em um sistema Debian recém-instalado, logado via ssh em /dev/pts/0 e digitei o seguinte comando
watch -n 10 clear > /dev/pts/0 ; netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
e o que eu recebo se parece com isso
Every 10.0s: clear Thu Jan 30 17:42:01 2020
^[3;J^[H^[2J
Por que essa caixa linux está me odiando ???
É a saída do
clear
comando…Você correu
clear
.clear
produziu essas sequências de controle. (Eles estão apenas em uma ordem diferente na minha máquina.)Em um terminal ECMA-48 ou emulador de terminal, essas sequências de controle apagam a tela e posicionam o cursor.
Mas o
watch
comando interpreta as saídas padrão dos processos que ele executa e não entende nenhuma sequência de controle ECMA-48 além de uma. Ele compreende apenas alguns dos caracteres de controle TTY-37 de 1968 e (se o-c
sinalizador for usado) a sequência de controle SGR do ECMA-48.Todo o resto passa para ncurses, que imprime caracteres de controle em notação de acento circunflexo. Mas por causa de um bug em
watch
, o segundo caractere de uma string de notação de acento circunflexo é imediatamente sobrescrito, e o que deveria ter sido^[[
sai como^[
nawatch
saída de .… e apenas o
clear
comando.O script de shell não é citado:
Portanto, são dois pipelines, sequencialmente:
O redirecionamento acontece antes que os comandos sejam executados e, em dois casos, está redirecionando a saída padrão para o pseudo-terminal para o qual estava aberto de qualquer maneira . Eles são efetivamente no-ops:
Sua máquina está fazendo exatamente o que você disse para fazer.
Então você está observando a saída apenas do
clear
comando, repetidamente, cuja saída não está sendo processada como sequências de controle, mas simplesmente impressa em notação de acento circunflexo quebrada.Saia
watch
para executar seunetstat
comando uma vez. ☺