5 votes

Est-ce que grep utilise de manière incohérente grep -P par défaut ?

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 ou grep="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

2voto

Anatidaus Points 2549

Sont l'un de ces variables et?

GREP_OPTIONS, LC_ALL, LC_COLLATE, LANG, LC_CTYPE, LC_MESSAGES ou POSIXLY_CORRECT

L'un d'entre eux pourrait affecter le comportement de grep.

Une chose que vous pourriez essayer est "set -x" pour voir les commandes individuelles qui sont exécutées. Vous pourriez également déplacer les commandes dans un script shell et appeler cela depuis cron. De cette façon, vous pouvez plus facilement ajouter des commandes comme set, env et set -x plus facilement.

#!/bin/bash
echo SET
set
echo ENV
env
set -x
grep -il "^ws_status\\s*=\\s*[\"']remove[\"']$"
exit

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X