- 论坛徽章:
- 0
|
背景描述:在/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就不行? |
|