Alguns dos motivos pelos quais a OP declarou que as opções são inadequadas não têm base na realidade. Aqui, mostro que tipo de efeitos usando a estratégia 4 do OP:
Na maioria das distribuições, grepé instalado em /bin(típico) ou /usr/bin(OpenSUSE, talvez outros), e o padrão PATHcontém /usr/local/binantes /binou /usr/bin. Isso significa que se você criar /usr/local/bin/grepcom
#!/bin/sh
exec /bin/grep --color=auto "$@"
onde /bin/shé um shell compatível com POSIX fornecido pela sua distribuição, geralmente bash ou dash. Se grepestiver dentro /usr/bin, faça isso
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
A sobrecarga desse script é mínima. A execdeclaração significa que o interpretador de script é substituído pelo grepbinário; isso significa que o shell não permanece na memória enquanto grepestá sendo executado. Portanto, a única sobrecarga é uma execução extra do interpretador de script, ou seja, uma pequena latência no tempo do relógio de parede. A latência é mais ou menos constante (só varia dependendo se grepe shjá estão no cache de página ou não, e de quanto I / O largura de banda disponível), e não depende de quanto tempo grepexecuta ou quantos dados que processa.
Então, quanto tempo dura essa latência, ou seja, a sobrecarga adicionada pelo script do wrapper?
Para descobrir, crie o script acima e execute
time /bin/grep --version
time /usr/local/bin/grep --version
Na minha máquina, o primeiro leva 0,005s em tempo real (em um grande número de execuções), enquanto o último leva 0,006s em tempo real. Portanto, a sobrecarga do uso do wrapper na minha máquina é de 0,001s (ou menos) por chamada.
Isso é insignificante.
Também não consigo ver nada "sujo" sobre isso, porque muitos aplicativos e utilitários comuns usam a mesma abordagem. Para ver a lista deles na sua máquina /bine /usr/bin, basta executar
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
Na minha máquina, a saída acima inclui egrep, fgrep, zgrep, which, 7z, chromium-browser, ldd, e xfig, que eu uso com bastante frequência. A menos que você considere sua distribuição inteira "suja" por confiar em scripts de wrapper, você não tem motivos para considerar esses scripts de wrapper "sujos".
Quanto aos problemas que um script de wrapper pode causar:
Se apenas usuários humanos (em oposição a scripts) estiverem usando a versão do grep que possui como padrão o suporte a cores se a saída for para um terminal, o script do wrapper poderá ser nomeado colorgrepou cgrepou o que o OP considerar adequado.
Isso evita todos os possíveis problemas de compatibilidade, porque o comportamento de grepnão muda.
Ativando grepopções com um script de wrapper, mas de uma maneira que evite novos problemas:
Podemos reescrever facilmente o script do wrapper para suportar um costume, GREP_OPTSmesmo que GREP_OPTIONSnão tenha sido suportado (como ele já foi descontinuado). Dessa forma, os usuários podem simplesmente adicionar export "GREP_OPTIONS=--color=auto"ou semelhante ao seu perfil. /usr/local/bin/grepé então
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
Observe que não há aspas $GREP_OPTIONS, para que os usuários possam especificar mais de uma opção.
No meu sistema, executar time /usr/local/bin/grep --versioncom GREP_OPTIONSvazio, ou com GREP_OPTIONS=--color=auto, é tão rápido quanto a versão anterior do script do wrapper; isto é, normalmente leva um milissegundo a mais para ser executado do que simples grep.
Esta última versão é a que eu pessoalmente recomendo para uso.
Em resumo, a estratégia 4 do OP:
já é recomendado pelos grepdesenvolvedores
é trivial de implementar (duas linhas)
possui sobrecarga insignificante (uma latência extra de milissegundos por chamada neste laptop em particular; facilmente verificável em cada máquina)
pode ser implementado como um script de wrapper que adiciona GREP_OPTSsuporte (para substituir obsoleto / não suportado GREP_OPTIONS)
pode ser implementado (como colorgrep/ cgrep) que não afeta scripts ou usuários existentes
Por ser uma técnica amplamente utilizada nas distribuições Linux, é uma técnica comum e não "suja".
Se implementado como um wrapper separado ( colorgrep/ cgrep), não poderá criar novos problemas, pois não afeta o grepcomportamento. Se implementado como um script de wrapper que adiciona GREP_OPTSsuporte, o uso GREP_OPTS=--color=autotem exatamente os mesmos riscos (problemas graves com scripts existentes) que a adição de upstream padrão --color=autoteria. Portanto, o comentário de que isso "cria mais problemas do que resolve" é completamente incorreto: nenhum problema adicional é criado.