Sam*_*tch 5 linux bash grep environment-variables
我有一个脚本可以做一些内务处理,当从交互式 shell 调用时它运行良好,但在被 cron 调用时什么也没做。为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的 shell:
env -i /bin/bash --noprofile --norc
Run Code Online (Sandbox Code Playgroud)
使用这个空白环境,我已经深入到我的脚本中,发现以下内容grep与任何文件都不匹配:
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
Run Code Online (Sandbox Code Playgroud)
但是,当从交互式 shell 运行时,该命令将返回匹配文件的文件名。
请注意,该表达式匹配如下行: WS_STATUS = "remove"
通过反复试验,我发现将-P选项添加到 [Perl regex] 中,命令开始在“空白”shell 中正常工作。但是,我不知道为什么我的登录 shell 似乎默认为grep -P.
grep二进制,/bin/grepgrep=pgrep或定义别名grep="grep -P"GREP_OPTIONS定义环境变量。这里有什么交易?
注:操作系统为 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 的行为。
您可以尝试的一件事是“set -x”来查看运行的各个命令。您还可以将命令移至 shell 脚本中并从 cron 调用该脚本。这样您就可以更轻松地添加set、env、 等命令set -x。
#!/bin/bash
echo SET
set
echo ENV
env
set -x
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
exit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |