Saída de script de cor somente quando invocada a partir do shell interativo

3

Eu fiz um script bash produzindo saída colorida. As cores são boas quando o script é chamado a partir de um shell interativo. No entanto, se a saída é processada em outro script ou passada por um pipe, ela não deve ser colorida (acho).

Como isso é tratado normalmente? Devo fornecer uma opção para ativar / desativar a saída colorida ou há uma maneira de detectar isso automaticamente no script? De preferência, ele funciona automaticamente e eu só preciso de um mínimo de código para saída colorido / não colorido, dependendo da invocação do script ...

Um problema com a detecção automática parece ser que um script sempre executa não-interativo, então eu teria que saber o status interativo do shell pai.

    
por Werner Lehmann 29.12.2012 / 22:44

1 resposta

2

É comum que a aplicação unix que suporta a saída de cores (como grep e ls ) tenha uma opção de linha de comando, bem como, possivelmente, detecção automática.

olhando para man ls , vemos

--color[=WHEN]
              colorize the output.  WHEN defaults to 'always' or can be 'never' or 'auto'.  More info below

Portanto, por padrão, o ls sempre usará cores, observe a opção auto .

man grep mostra semelhante

 --color[=WHEN], --colour[=WHEN]
              <snipped> WHEN is never, always, or auto.

Se a opção auto estiver habilitada (o que para seu aplicativo pode ser o padrão), algo como a seguinte resposta (sugerida por Gilles) pode ser o que você está procurando link

Isto é, se a sua saída é um terminal e suporta cor, e o usuário não a desativou, você deve usar cores. É claro que o usuário que usa always ou never pula essa verificação.

Acho útil que os programas tenham --color=always , mesmo que suportem a detecção automática, pois isso pode forçar o uso da cor "quando eu souber melhor" (digamos que meu destino não é um terminal, mas sei que ele é compatível cor'). Em alguns sistemas, tenho um alias para ls to ls --color=always .

    
por 30.12.2012 / 01:02