Alguma ideia do que poderia estar causando isso? Sem usar grep, as únicas coisas exibidas são os códigos ISO e o espaço vazio.
Comando: ./trans --id --input /path/to/txt | grep ISO | grep [a-z]
root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'
Saída normal:
grep
terminal
pipe
escape-characters
Freedo
fonte
fonte
grep
s à direita e o resultado dealias grep
etype grep
?Respostas:
A captura de tela parece mostrar códigos de cores ANSI mutilados , que controlam a renderização de texto. O texto em negrito / claro é produzido com a sequência
␛[1m
, que geralmente é interpretada pelo seu terminal e não é exibida diretamente na tela: apenas torna o próximo pedaço de texto brilhante. A captura de tela dagrep
saída un ped mostra a diferença de cores entre os rótulos e os valores em cada linha, para que a saída original os use.Parece que essa sequência foi interrompida pela sua final
grep
, que correspondia ao "m" no código (já que é uma letra[a-z]
) e tentou destacá-la em vermelho. Isso deixou uma sequência de escape parcial para trás, que seu terminal não conseguiu processar.O caractere de escape
␛
é U + 001B, que é o número hexadecimal que é renderizado nas caixas de caracteres desconhecidos. O que é exibido é o escape (a caixa), a[
, a1
, um vermelhom
seguido pelo texto correspondente esperado "eng" e o mesmo acontecendo no final com "22" (o código numérico para "cor e intensidade normais").A saída quebrada é realmente:
onde
␛[31m
torna o texto vermelho e␛[22m
volta para branco, ambos inseridos aogrep
redor dosm
caracteres no texto original. O original era apenas:que é apenas brilhante "
eng
" e, em seguida, volta ao texto normal.Você pode verificar isso alterando seu final
grep
para ogrep --color=always
canalhexdump
, mostrando todos os caracteres não imprimíveis e os interpretados pelo seu terminal.Você pode lidar com isso de algumas maneiras. Uma é usar
grep
sem o seu alias no momento:A barra invertida ignora temporariamente o alias e é executado
grep
diretamente.Outra é retirar os códigos ANSI do comando original, para o qual existem algumas sugestões nesta pergunta :
Ainda outra opção é adicionar um tubo estranho no final:
Como a
grep
saída final não é diretamente no TTY, mascat
através de um tubo, ele não inserirá o realce colorido.Talvez a melhor opção seja fazer com que o Translate Shell pare de usar seqüências de controle de terminal em sua própria saída em primeiro lugar, quando não estiver em um terminal. Isso envolveria adequadamente um relatório de erro de você para o (s) autor (es) e uma correção de código para a
ansi()
função do Translate Shell , mas é possível contê-lo um pouco:Isso passa pelo
dumb
tipo de terminal no ambiente do Translate Shell, que pelo menos reconhece como não tendo suporte a cores ECMA-48. (Infelizmente, o Translate Shell não usa terminfo e apenas conecta em seu próprio código os tipos de terminal que ele entende e as seqüências de controle que ele usa.)fonte
GREP_COLOR
ou quebradaGREP_COLORS
que contém sequências de escape SGR completas, em vez de apenas os números.--color=no
ao grep final (ou aplicar oTERM=dumb
a ele)