Eu realmente consegui descobrir isso, e acho que adicionaria aqui o próximo googler que bate com a cabeça na mesma parede.
Eu tinha um alias grep e GREP_OPTIONS
set. Isso fez com que o realce de cor permanecesse no script, mesmo quando ele estivesse passando para outro comando. Isso geralmente não funciona muito bem com sed
.
Aqui estão minhas .alias e opções:
alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"
Portanto, ao executar a partir do script, ele não usa o comando com alias e, portanto, força a cor a estar sempre ativa. Então, quando eu chequei meu alias e vi a opção --color
(que significa auto
, que significa "não cor saída que é canalizada para outro comando" (como sed
).
Eu estava confuso porque esqueci que tinha definido GREP_OPTIONS
, então eu esperava que o grep
no script tivesse color
definido como auto
por padrão (como seria se eu não tivesse definido o% globalGREP_OPTIONS
). Mas não é assim.
Aqui estão as minhas novas configurações (acredito que o sinal --color
to GREP_OPTIONS
seja redundante, mas deixo isso como um lembrete):
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
Dessa forma, sempre que eu estiver na linha de comando, terei destaque para todos os meus greps (que geralmente é o que eu quero). Mas nos scripts, o padrão será colorir apenas quando não for canalizado para outro comando. Eu ainda terei que adicionar --color = sempre a muitos dos meus scripts (já que eu prefiro destacar na maioria dos casos, mesmo quando estou passando para outro comando, a menos que eu nunca veja a saída).