Назад | Перейти на главную страницу

grep непоследовательно по умолчанию используется grep -P?

У меня есть сценарий, который выполняет некоторую уборку, отлично работает при вызове из интерактивной оболочки, но ничего не делает при вызове cron. Чтобы решить эту проблему, я запустил оболочку с «пустой» средой с помощью команды:

env -i /bin/bash --noprofile --norc

Используя этот пустой env, я углубился в свой скрипт и обнаружил, что следующие grep не будет соответствовать никаким файлам:

grep -il "^ws_status\s*=\s*[\"']remove[\"']$"

Однако при запуске из интерактивной оболочки команда вернет имена файлов соответствующих файлов.

Обратите внимание, что выражение соответствует таким строкам, как: WS_STATUS = "remove"

Методом проб и ошибок я обнаружил, что добавление -P к параметрам [Perl regex] команда начала нормально работать в «пустой» оболочке. Однако у меня есть без понятия почему моя оболочка входа в систему по умолчанию grep -P.

В чем дело?

Примечание: ОС - RHEL v5.10, Bash - v3.2.25, grep - v2.5.1

Есть ли какие-либо из этих переменных et?

GREP_OPTIONS, LC_ALL, LC_COLLATE, LANG, LC_CTYPE, LC_MESSAGES или POSIXLY_CORRECT

Любой из них может повлиять на поведение grep.

Вы можете попробовать «установить -x», чтобы увидеть отдельные выполняемые команды. Вы также можете переместить команды в сценарий оболочки и вызвать его из cron. Так вам будет проще добавлять такие команды, как set, env, и set -x легче.

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