J'ai un script qui effectue un peu de maintenance et qui fonctionne parfaitement bien lorsqu'il est appelé depuis un shell interactif, mais qui ne faisait rien lorsqu'il était appelé par cron. Pour déboguer cela, j'ai démarré un shell avec un environnement 'vide' avec la commande :
env -i /bin/bash --noprofile --norc
En utilisant cet environnement vide, j'ai examiné mon script et découvert que la commande grep
suivante ne trouvera aucun fichier :
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
Cependant, lorsqu'il est exécuté depuis un shell interactif, la commande renverra les noms de fichiers des fichiers correspondants.
À titre d'information, l'expression correspond à des lignes comme : WS_STATUS = "remove"
Après plusieurs essais, j'ai découvert qu'ajouter -P
aux options [Perl regex] permettait à la commande de fonctionner normalement dans le shell 'vide'. Cependant, je n'ai aucune idée pourquoi mon shell de connexion semble être configuré par défaut sur grep -P
.
- Il n'y a qu'un seul binaire
grep
,/bin/grep
- Aucune alias n'est définie pour
grep=pgrep
ougrep="grep -P"
- Il n'y a aucune variable d'environnement
GREP_OPTIONS
définie.
Quel est le problème ici ?
Remarque : le système d'exploitation est RHEL v5.10, Bash est v3.2.25, grep est v2.5.1