免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: -liupangzi-
打印 上一主题 下一主题

【结贴】awk中使用变量作为输入&&手动执行与使用crontab执行脚本的区别 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-01 11:25 |只看该作者
本帖最后由 ywlscpl 于 2010-08-01 11:29 编辑
问题是这样的,我有一个脚本,shell中执行VAR=$(ls -al FILE | awk  '{print $7}' )的时候,显示的是文件修改时间
但是在crontab中执行时必须将&7改为&8才能正常运行,为什么?


95%的crontab问题都跟环境变量有关,在crontab执行的时候,很多环境变量都是没有的,最常见的就是$PATH变量。经常有人提问命令行下手动执行脚本没问题而crontab中执行出错,大部分原因是脚本中某些命令没有使用绝对路径而在crontab执行的时候因为没有$PATH变量无法找到命令导致出错。

楼主这个问题也不例外,就是跟环境变量有关系。ls -al的输出跟locale的设置有关系,具体就是文件修改时间的显示格式的差异。举个例子也许更清楚
[root@Mylinux tmp]# echo $LANG
zh_CN.UTF-8
[root@Mylinux tmp]# ls -al o*
-rw-r--r-- 1 root root   1 04-30 06:19 o
-rw-r--r-- 1 root root 726 04-30 06:19 o1
-rw-r--r-- 1 root root  12 04-30 06:07 ooo
[root@Mylinux tmp]# LANG=""
[root@Mylinux tmp]# ls -al o*
-rw-r--r-- 1 root root   1 Apr 30 06:19 o
-rw-r--r-- 1 root root 726 Apr 30 06:19 o1
-rw-r--r-- 1 root root  12 Apr 30 06:07 ooo

crontab中的LANG值为空
[root@Mylinux tmp]# crontab -l
* * * * *  echo $LANG >/tmp/o
[root@Mylinux tmp]# cat o

[root@Mylinux tmp]#

论坛徽章:
0
12 [报告]
发表于 2010-08-01 12:21 |只看该作者
尾随ywlscpl

论坛徽章:
0
13 [报告]
发表于 2010-08-01 21:52 |只看该作者
本帖最后由 -liupangzi- 于 2010-08-01 21:56 编辑

回复 11# ywlscpl


    太谢谢你了,我意识到这个可能是和环境变量有关系了,但是始终不明白为什么截出来的小时会是30。
   
   现在看明白了,那个30,就像你示例中的那样,刚好也是第7位,我没注意到这点(我写shell那天是7.30,哈哈)。

   再次感谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP