我有一个脚本,它做一些内务处理,从交互式
shell调用时效果很好,但在被cron调用时什么也没做.为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的shell:
env -i /bin/bash --noprofile --norc
使用这个空白环境我已经挖到我的脚本,发现以下grep将不匹配任何文件:
grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
但是,从交互式shell运行时,该命令将返回匹配文件的文件名.
作为注释,表达式匹配如下行:WS_STATUS =“remove”
通过反复试验,我发现在选项[Perl regex]中添加-P命令在’blank’shell中正常启动.但是,我不知道为什么我的登录shell似乎默认为grep -P.
>只有一个grep二进制文件/ bin / grep
>没有为grep = pgrep或grep =“grep -P”定义的别名
>没有定义env变量GREP_OPTIONS.
这是什么交易?
注意:操作系统是RHEL v5.10,Bash是v3.2.25,grep是v2.5.1
解决方法
这些变量中的任何一个都是?
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。