GREP_OPTIONS = --color = est-il toujours ignoré?

8

Je jouais avec le décor GREP_OPTIONSet je n'arrivais pas à le faire fonctionner. Juste curieux de savoir pourquoi.

Sortie de commandes de test simples:

richard@ubuntu:~$ echo $GREP_OPTIONS

richard@ubuntu:~$ 

richard@ubuntu:~$ ls | grep o 
Desktop
downloads
Dropbox
ebooks
workspace

richard@ubuntu:~$ ls | grep o --color=always | less -R 

richard@ubuntu:~$ export GREP_OPTIONS="--color=always" 
richard@ubuntu:~$ ls | grep o  | less -R 
  1. Le 1er grep sort au terminal en couleur (chaque «o» est rouge)
  2. Le 2e grep sort via moins de couleurs (comme 1)
  3. Mais le 3e grep sort en moins mais en noir et blanc - mais cela devrait être en couleur.

Il semble donc que grep ignore GREP_OPTIONS. Est-ce un bug ou est-ce que je fais quelque chose de mal?

(Ubuntu 12.04.2, GNU grep 2.10)

Richard
la source
grep v3.1se plaint fortement GREP_OPTIONSà chaque invocation:grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Tom Hale
J'utilise: alias grep='GREP_COLOR="1;33;40" LANG=C grep --color=auto'pour surligner en jaune.
Tom Hale

Réponses:

11

Si grep oproduit une sortie couleur, alors soit grepest un alias vers grep --color=autoou grep --color=always(ou éventuellement plus d'options), soit GREP_OPTIONSest défini sur une valeur qui contient --color=autoou --color=always. Puisque $GREP_OPTIONSest vide, ce doit être l'alias.

Puisque grep o | less -Rne montre pas les couleurs, l'alias doit être à grep --color=auto(un choix judicieux). Avec l'alias, la grepcommande reçoit toujours l' --coloroption sur la ligne de commande, ce qui a priorité sur la variable d'environnement.

Si vous souhaitez utiliser la variable d'environnement, supprimez la définition d'alias de votre ~/.bashrcou pour une session unalias grep. Vous pouvez remplacer alias grep='grep --color=auto'par export GREP_OPTIONS='--color=auto': ils ont essentiellement la même signification, sauf que:

  • la définition GREP_OPTIONSd'une valeur différente ne remplace que cette dernière;
  • l'alias grepintervient uniquement lorsque vous exécutez à partir d'un shell interactif, tandis que le paramètre GREP_OPTIONSs'applique également lorsqu'il grepest exécuté à partir de scripts et d'autres applications.

Ne jamais mettre --color=alwaysou la plupart des autres options GREP_OPTIONS: cela casserait de nombreux programmes qui analysent la sortie de grep. --color=autoest à peu près la seule option sûre à installer GREP_OPTIONS. Pour toute autre chose, utilisez l'alias. Les futures versions de GNU grep abandonneront le support de l'option pour cette raison.

Notez que la définition d'alias entre ~/.bashrc(c'est un paramètre shell), tandis que la définition de variable d'environnement entre ~/.profile(c'est un paramètre session). Voir Existe - t-il un fichier équivalent ".bashrc" lu par tous les shells?

Si vous souhaitez exécuter la commande sans créneau une seule fois, exécutez \grepau lieu de grep(en citant n'importe quelle partie du nom contourne la recherche d'alias).

Gilles 'SO- arrête d'être méchant'
la source
Oui, vous avez raison, exécuter \ grep ... le montre correctement. Merci pour le conseil bonus pour m'avoir déconseillé d'utiliser "= toujours" dans .bashrc. +1
Richard
1
Veuillez noter qu'il GREP_OPTIONSest déconseillé au profit de la aliasvariante.
Tous les travailleurs sont essentiels