shell脚本报错之-No such file or directory究极分析及解决

本文详细分析了脚本执行时遇到的Nosuchfileordirectory错误,主要原因是文件权限问题、依赖问题、文件格式不一致以及使用dirname定义路径时的相对路径问题。提供了相应的解决方法,包括设置文件权限、检查依赖、转换文件格式和使用绝对路径等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

目录

1、脚本执行报错内容

2、故障分析解决

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

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

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

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


1、脚本执行报错内容

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

比如:

cat /root/libs/sql/echat.sql
awk '{print $NF}' /root/libs/sql/echat.sql
grep "字符串" /root/libs/sql/echat.sql

等等....

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

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

root@xiaopeng:~# ll /root/libs/sql/echat.sql
-rw-r--r-- 1 999 1000 92915 Apr  9 09:04 /root/libs/sql/echat.sql

2、故障分析解决

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

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

解决方法:

#给文件添加可执行权限
chmod +x /root/libs/sql/echat.sql

#再次查看权限
ll /root/libs/sql/echat.sql
-rwxr-xr-x 1 999 1000 92915 Apr  9 09:04 /root/libs/sql/echat.sql*

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

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

解决方法:

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

ldd /root/libs/sql/echat.sql
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 脚本名就可以了,如下:

dos2unix install.ini

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

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

yum -y install The program dos2unix     #安装dos2unix命令
dos2unix 脚本名                         #将脚本文件的格式修改为linux平台支持的格式

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

apt update
apt install -y dos2unix                 #安装dos2unix命令
dos2unix 脚本名                         #将脚本文件的格式修改为linux平台支持的格式

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

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

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

Script_Path=`dirname "$0"`

# $0就是脚本文件名
# dirname命令可以获取到文件所在的路径
# Script_Path是脚本文件所在路径的变量名

最后排查发现,此`dirname "$0"`输出的内容并不是绝对路径,而是相对路径。

相当于$Script_Path调用到的值就只是个“.”在linux中“.”代表当前的路径,如果脚本在/opt下执行,$Script_Path输出的也只是一个点,理论上代表的就是当前路径,但是当你需要调用此路径下的其他文件的时候,就会出错了!写一个小测试脚本展示一下

比如我的脚本中调用了脚本所在路径下的一个speech.sql文件,然后脚本执行报错./libs/sql/speech.sql:No such file or directory

我根据报错在命令行执行ls ./libs/sql/speech.sql却能找到这个文件

但是脚本执行过程中它只认绝对路径,在脚本内部它并不能解释出这个“.”是当前路径

解决办法:

将脚本中的脚本路径变量的值用其他方法表示,比如:Script_Path=`pwd`

如下:

也可以写成Script_Path=$(pwd),这两种写法都是一样的,如下:

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

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

### ArcGIS 中 'No such file or directory' 错误解决方案 当遇到 `No such file or directory` 错误时,通常意味着尝试访问的文件或目录不存在于指定位置。对于 ArcGIS 用户来说,这类错误可能发生在多个场景下。 #### 1. Xcode 构建过程中出现的错误 如果是在构建 iOS 应用程序期间遇到了此问题,可能是由于缺少必要的资源文件或路径配置不正确引起的。建议检查项目设置中的输出路径以及所需资源是否存在并可访问[^2]。 ```bash make directory /Users/macbook/Library/Developer/Xcode/DerivedData/MapViewDemo-ObjC-frvwzweptunabjgecjimiqyznkzu/Build/Products/Debug-iphonesimulator/MapViewDemo-ObjC.app/ArcGIS.bundle/ar.lproj: No such file or directory ``` 应确保所有依赖项已正确定位,并且在编译前确认这些文件确实存在于预期的位置上。 #### 2. 浏览器预览本地部署的 ArcGIS API 文档时出现问题 针对这种情况,可以按照官方指南操作来调整沙盒环境中引用的 JavaScript API 的 URL 到本地安装版本: - 打开 arcgis_js_v422_sdk 文件夹内的 install.html 页面; - 参考官方网站提供的说明文档更新 HTML 文件内 `<script>` 标签 src 属性指向新的本地地址[^3]; 这一步骤能够帮助开发者更方便地测试自定义修改而无需每次都从远程服务器加载库文件。 #### 3. Shell 脚本执行失败的情况 有时也会因为 shell 命令试图切换到不存在的目标文件夹而导致类似的报错信息。为了避免此类情况发生,在编写脚本时应该先验证目标路径的有效性再继续后续处理逻辑[^4]: ```sh while read line; do target_path="xxx/path/${line}" if [ ! -d "$target_path" ]; then echo "'$target_path' does not exist." continue fi cd $target_path || exit done < path ``` 上述代码片段展示了如何安全地遍历给定列表里的每一行作为子目录名的一部分,并仅当该组合后的绝对路径存在时才改变当前工作区至那里。 #### 4. License Manager 安装启动相关联的问题 最后一种可能性涉及到了 Esri 提供的产品许可管理工具 lmgrd 。 如果收到关于找不到特定文件的消息,则表明软件未能找到其运行所需的某些组件。此时应当参照产品手册完成正确的安装流程,包括但不限于下载最新版客户端包、解压缩存放到合适的地方等准备工作[^5]. 总结而言,“No such file or directory”的根本原因在于请求的对象不在所指明之处。因此解决问题的关键就在于仔细核对实际存在的物理存储结构与应用程序期望之间的差异,并作出相应修正。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏linux

感谢老板,老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值