注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网事

备忘录

 
 
 

日志

 
 

shell脚本的working path  

2011-09-12 09:49:23|  分类: shell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

linux的所有程序在执行时,均会使用当前的路径为基准目录,程序中所有使用相对路径的地方,均会以这个基准目录为准。这是常识,right,的确是常识。不过是个经常让人忽略的常识,特别是在程序运行中启动新的进程的时候。

前几天帮一位新同事debug问题,最终的问源题就是这个。在同一个目录下,有一个php脚本和shell脚本,php脚本会启动shell脚本做一些文件下载的工作,然后php脚本继续下载的文件进行处理。程序完成后,手工运行没有任何问题,两个脚本能够很好的配合。

但是放到crontab时就出现问题了:php脚本无法获得shell脚本下载的文件,给人的感觉是shell脚本未执行。通过检查shell脚本 的返回状态码,未发现异常。通过在shell中echo些数据,发现shell脚本也确实被正常调用了。但为什么没有得到期望中的被下载文件呢?

于是想到了会不会是working path的原因。在shell脚本中执行pwd并输出,发现shell的working path为账户的home目录。查看home目录的内容,果然发现了shell所下载的文件。Ok,问题找到了。

解决的方式也很简单,有两种

  1. 在crontab中,执行php脚本前,首先cd到需要的目录,这样php和shell脚本均可使用相对路径,不用调整代码
  2. 在shell脚本中,执行下cd命令,进入所需要的working path

比较推荐第1种,第二种相当于hard code了,比较不灵活。

  评论这张
 
阅读(697)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018