51 votes

grep perd sa coloration lorsqu'il est exécuté à partir de bash script

J'ai écrit un simple script bash script parce que j'utilisais une commande grep avec les mêmes arguments, de manière répétée. Je l'exécute depuis ~/bin et il fonctionne parfaitement.

Mon problème est le suivant : Toute la coloration disparaît lorsqu'il est exécuté par mon bash script. La même commande, placée directement dans la ligne de commande, colore joliment les numéros de ligne, les noms de fichiers, etc.

Voici mon script.

#!/bin/bash
# grep php files inside of myfolder, recursively and with line numbers

grep -rn --include="*.php" "$2" /home/me/myfolder/$1

74voto

larsmans Points 167484

Vous avez probablement défini grep comme alias de grep --color=auto dans votre .bashrc mais elle n'est pas chargée par les scripts. Utilisez un grep --color dans votre script.

5voto

PlexQ Points 1579

Lorsque vous exécutez un script, un nouvel environnement de travail est créé. Ce nouvel environnement n'a pas les mêmes paramètres que votre shell par défaut. Je ne suis pas sûr de savoir comment récupérer la coloration. Vous pourriez essayer d'insérer votre profil au début du script :

#!/bin/bash
source $HOME/.bash_profile

ou tout autre fichier utile à votre système Unix (.profile, .bash_rc, .bashrc .bash_profile), pour n'en citer que quelques-uns.

1 votes

J'ai essayé avec 'source $HOME/.bashrc' et 'source $HOME/.profile' mais cela n'a pas fonctionné pour moi. J'espérais vraiment que ce serait la solution pour ne pas avoir à indiquer explicitement des choses comme '--color', ou tout autre paramètre imprévisible, dans les futurs scripts.

2 votes

Vous pouvez exporter l'option vers l'environnement du script : export GREP_OPTIONS='--color=always'

3 votes

Cela m'a aidé à trouver une autre solution, au début du script ajouter -i : #!/bin/bash -i Il charge les paramètres par défaut de l'interpréteur de commandes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X