Como eu desabilito as seqüências de escape do controle de terminal no Linux?

5

Eu estou escrevendo um software que interage com um dispositivo embutido rodando uma versão do busybox Linux. Basicamente, estou apenas enviando comandos para o dispositivo e analisando a saída dos comandos. Os comandos são executados diretamente no shell do linux ou na linha de comando de um aplicativo CLI interno executado no dispositivo.

Tudo funciona bem, exceto que a saída é salpicada com seqüências de escape do controle de terminal . Em aplicativos de terminal, como teraterm ou putty, essas sequências de escape fazem coisas úteis como erros de cor vermelhos e outros recursos interessantes para uma interface de usuário agradável.

O problema é que tenho que analisar programaticamente a saída dos comandos e explicar coisas como "(esc) [2k" na saída.

Por exemplo, uma típica interação de envio / recebimento na qual eu envio um comando, "my-cmd" seria assim ...

[send] my-cmd
[receive] my-cmd <esc>[2Kprompt> my-cmd
output of the command
prompt> 

O que eu realmente gostaria de fazer é desativar essas sequências de escape. Isso é algo que pode ser feito no shell de comando no início de uma sessão? Ou não há outro caminho além de filtrar a saída?

    
por Angelo 28.01.2013 / 22:28

2 respostas

3

A maioria dos casos (se não todos) em que um comando * nix imprime uma saída colorida sem que o usuário solicite especificamente uma opção envolve aliases. De fato, muitas distribuições do Linux incluem um alias para ls e grep especificando cores no global /etc/bash.bashrc .

Estes são do meu Linux Mint Debian Edition:

$ grep alias /etc/bash.bashrc
    alias ls='ls --color=auto'
    alias grep='grep --colour=auto'

Portanto, se o seu programa estiver chamando esses comandos por meio do BASH, você estará executando ls --color=auto em vez de ls .

Você pode ignorar aliases no BASH (talvez outros shells também, mas eu não tentei) pelos seguintes métodos (retirados de aqui ):

  1. o nome completo do caminho do comando: /bin/ls

  2. substituição de comando: $(which ls)

  3. o comando incorporado: command ls

  4. aspas duplas: "ls"

  5. aspas simples: 'ls'

  6. um caractere de barra invertida: \ls

Se você usar um desses métodos em seu software, não precisará se preocupar com sequências de escape.

    
por 28.01.2013 / 23:56
0

se você estiver em redhat ou um parente, como fedora ou centos, você pode olhar para um modificando

/etc/sysconfig/init

procure as linhas que dizem algo como:

 # anything else => new style bootup without ANSI colors or positioning

 BOOTUP=color

e, como diz, altere a variável para algo diferente de "cor"

isso afeta o comportamento de alguns dos utilitários de linha de comando do sistema, como service, ifup, ifdown, etc.

    
por 05.08.2013 / 01:37