I have a script that does some housekeeping that works perfectly well when invoked from an interactive shell, but did nothing when invoked by cron. To troubleshoot this I started a shell with a 'blank' environment with the command:
env -i /bin/bash --noprofile --norc
Using this blank env I've dug into my script and found that the following grep
will not match any files:
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
However, when run from an interactive shell the command will return the filenames of the matching files.
As a note, the expression is matching lines like: WS_STATUS = "remove"
Through trial-and-error I discovered that adding -P
to the options [Perl regex] the command started working normally in the 'blank' shell. However, I have no idea why my login shell appears to be defaulted to grep -P
.
- There is only one
grep
binary,/bin/grep
- There are no aliases defined for
grep=pgrep
orgrep="grep -P"
- There is no env variable
GREP_OPTIONS
defined.
What's the deal here?
Note: OS is RHEL v5.10, Bash is v3.2.25, grep is v2.5.1
which grep
returnsgrep -P
? Did you do a recursive grep for "grep -P" in/etc/profile*
?which grep
returns/bin/grep
, andgrep -ri grep /etc/profile*
only prints out a few uses of it in the scripts.which grep
can you trytype grep
.grep is hashed (/bin/grep)
\grep
with a backslash, instead ofgrep
? I know you already said that it wasn't aliased, but in the off chance that it is, this should use an unaliased grep.