2025年no such file or directory解决办法(2:no such file or directory)

no such file or directory解决办法(2:no such file or directory)blockquote 博主简介 云计算领域优质创作者 2022 年 CSDN 新星计划 python 赛道第一名 2022 年 CSDN 原力计划优质作者 阿里云 ACE 认证高级工程师 阿里云开发者社区专家博主 交流社区 CSDN 云计算交流社区欢迎您的加入 目录 1 脚本执行报错内容 2 故障分析解决 2 1 原因及解决方法 1 文件权限问题 2 2 原因及解决方法 2 blockquote

大家好,我是讯享网,很高兴认识大家。



 <blockquote> 

讯享网

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区:CSDN云计算交流社区欢迎您的加入!

目录

1、脚本执行报错内容

2、故障分析解决

2.1、原因及解决方法1:文件权限问题

2.2、原因及解决方法2:文件依赖问题

2.3、原因及解决方法3:文件格式问题

2.4、原因及解决方法4:通过dirname来定义脚本路径问题


当我们在执行shell脚本时,脚本内容中需要引用某个其他路径下的文件或者对其做处理时,

比如:

讯享网

等等….

然后执行脚本的时候报错显示/root/libs/sql/echat.sql:No such file or directory,文件找不到?

但是我们退出脚本在命令行执行时候却能找到这个文件!

 
    

2.1、原因及解决方法1:文件权限问题

可能是你在脚本中的命令是对此文件进行处理,比如sed替换文件内容等,这个时候如果此文件没有可执行权限,那么脚本中就会调用失败。

解决方法:

讯享网

2.2、原因及解决方法2:文件依赖问题

如果问题仍然存在,可能是由于缺少文件的依赖项

解决方法:

用ldd命令查看文件,若返回 not a dynamic executable则说明此文件不是动态可执行文件,不需要考虑依赖问题,那么就继续排查其他原因

 
    

2.3、原因及解决方法3:文件格式问题

如果问题仍然存在,

可能是此文件实在windows下用一些idea工具编写,


讯享网

或者直接是在windows下用其他记事本写好再拿到linux中的

或者是从其他脚本文件中直接复制了内容粘贴到此脚本文件中

解决方法:

先查看文件格式是否为unix

vim或者vi命令打开脚本,然后按一下“:”左下角显示出“:”之后输入:set ff然后回车

如下:

如果返回了fileformat=dos,那么说明你的脚本文件格式不正确,需要修改为unix格式

修改方法一

vim或者vi命令打开脚本,然后按一下“:”左下角显示出“:”之后输入:set ff=unix  然后回车

如下:

然后再次用:set ff查看,显示为fileformat=unix了,然后:wq保存退出脚本,就能正常执行啦!

修改方法一

不需要打开脚本,直接在linux命令行里面输入dos2unix 脚本名就可以了,如下:

讯享网

如果返回The program ‘dos2unix’ is currently not installed说明没有这个命令,安装一下就可以了

centos和redhat操作系统执行如下命令:

 
    

ubuntu操作系统执行如下命令:

讯享网

2.4、原因及解决方法4:通过dirname来定义脚本路径问题

这个原因导致我的脚本执行报错No such file or directory,排查了一下午时间折腾死了

原因就是为了能让脚本在linux的任何路径下都可以执行,也为了方便调用其他文件,就用dirname来定义了脚本路径的变量。如下:

 
    

最后排查发现,此`dirname “\(0&#34;&#96;输出的内容并不是绝对路径&#xff0c;而是相对路径。</p> <p>相当于\)Script_Path调用到的值就只是个“.”在linux中“.”代表当前的路径,如果脚本在/opt下执行,\(Script_Path输出的也只是一个点&#xff0c;理论上代表的就是当前路径&#xff0c;但是当你需要调用此路径下的其他文件的时候&#xff0c;就会出错了&#xff01;写一个小测试脚本展示一下</p> <p><img alt="" height="162" src="https://i-blog.csdnimg.cn/blog_migrate/756fbbca75fac6d.png" width="717" /></p> <p>比如我的脚本中调用了脚本所在路径下的一个speech.sql文件&#xff0c;然后脚本执行报错https://blog.csdn.net/_/article/details/libs/sql/speech.sql:No such file or directory</p> <p>我根据报错在命令行执行ls https://blog.csdn.net/_/article/details/libs/sql/speech.sql却能找到这个文件</p> <p>但是脚本执行过程中它只认绝对路径&#xff0c;在脚本内部它并不能解释出这个“.”是当前路径</p> <p><img alt="" height="146" src="https://i-blog.csdnimg.cn/blog_migrate/82453a5aac1fbae56e940b7025f1910e.png" width="667" /></p> <p><strong>解决办法&#xff1a;</strong></p> <p>将脚本中的脚本路径变量的值用其他方法表示&#xff0c;比如&#xff1a;Script_Path&#61;&#96;pwd&#96;</p> <p>如下&#xff1a;</p> <p><img alt="" height="166" src="https://i-blog.csdnimg.cn/blog_migrate/d721c2566e74ad5ca03.png" width="681" /></p> <p>也可以写成Script_Path&#61;\)(pwd),这两种写法都是一样的,如下:

至此,No such file or directory问题就完美解决了!

还有一种原因就是windows写的文件和linux中的文件内容因为换行符不同导致无法正常执行,这个问题我暂时还没遇到过,以后遇到了再追加到此篇博文中吧


小讯
上一篇 2025-05-22 14:06
下一篇 2025-05-16 17:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/160760.html