技术与生活 / 一篇记录
脚本明明在同一目录,为什么找不到文件?
从终端启动、被定时任务启动和被另一个脚本调用,得到的工作目录可能完全不同。打开相对路径时,系统不会替你寻找脚本旁边的文件,而是从进程当前目录解析。
先明确这里的区别
相对路径以当前目录为起点,脚本所在目录不一定是运行目录。
以下示例面向常见 GNU/Linux 环境,文件名为实验用占位名称。
pwd
怎样判断处理正确
从两个目录执行并比较输出,理解相对路径为何改变。
先记录 pwd 的输出,再把同一个相对路径写成绝对路径比较。如果绝对路径可读而相对路径失败,就应修正路径来源,而不是继续修改文件权限。
另一个容易忽略的情况是脚本中途执行了 cd。入口处的 pwd 正确,并不能证明后续打开文件时仍在同一目录。将路径计算集中到入口,再把绝对路径传给函数,通常更容易追踪。
需要留意的是,需要稳定定位资源时,应明确传入目录或先计算脚本路径。
参考:Linux 文档。