免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1574 | 回复: 1
打印 上一主题 下一主题

案例讨论,关键字:while,重定向,变量,crontab [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-15 11:39 |只看该作者 |倒序浏览
背景描述:在/home/test目录下有脚本:test.sh,有文件123.txt。

脚本内容是:读取123.txt中的内容然后做成html格式的邮件发送。

相关代码段:
export PATH="/home/test:/bin.......xxxxxx"
while read line
do
抓取123.txt文件中的内容,通过echo来绘制html格式文件
done  <  ./123.txt

手工在/home/test目录下执行 sh test.sh, ./test.sh均能正常收到邮件并显示html表格。

大问题:写到crontab里每5分钟定时运行一次:*/5 * * * * sh /home/test/test.sh,收到的邮件只有一个html表格框架,没有123.txt中的内容。

引申问题:1 怀疑是while重定向问题,因为“done < ./123.txt”会再开一个子shell,在循环完毕后会关闭,在123.txt中取到的值可能返回不了test.sh产生的shell中。
讨论:同样的代码为什么手工执行就可以,crontab就不行?

引申问题:2 怀疑是文件路径问题,因为是使用的是相对路径"done < ./123.txt"。
讨论:在test.sh中已经在export PATH中加入了运行目录"/home/test"。

目前解决办法:在脚本中加个变量为file="/home/test/123.txt",使用"done < $file"后工作正常了。现在看来就是绝对路径和相对路径的问题,但我一直纳闷的就是在不修改脚本的前提下为啥手工执行脚本就ok,crontab就不行?

论坛徽章:
0
2 [报告]
发表于 2012-02-15 11:52 |只看该作者
./是当前目录的意思,<./123.txt是指的当前目录下的123.txt文件作为标准输入。
环境变量PATH是命令搜索路径,而 123.txt不是命令,跟PATH无关
一个解决方法是用绝对路径
另一个方法是将当前路径设置为123.txt文件所在的路径,在while前面加一行 cd /home/test/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP