linux - 当我尝试运行从 Windows 系统编写的 Linux 脚本时出现“没有这样的文件或目录”错误
问题描述
我在我的 PC 上用 Windows7 编写了一些脚本文件,然后我将这些文件上传到远程 Linux 计算机。远程计算机上的系统是:
Debian 3.14.15-2 (2014-08-09) x86_64 GNU/Linux
由uname -a
. 使用ls
命令,我看到文件已成功上传到预期的目录:
xxx@ion:/mnt/backup/TIEGCM2/saturation_2.0$ ls
Apr_P_150_res5.0.job Apr_P_200_res5.0.job Apr_P_100_res5.0.job
这些文件是 C shell 脚本:
xxx@ion:/mnt/backup/TIEGCM2/saturation_2.0$ file Apr_P_200_res5.0.job
Apr_P_200_res5.0.job: C shell script, ASCII text executable, with CRLF line terminators
但是,当我使用 nohup 运行其中一个时,它会抛出错误“没有这样的文件或目录”:
xxx@ion:/mnt/backup/TIEGCM2/saturation_2.0$ nohup ./Apr_P_200_res5.0.job &
[3] 17065
xxx@ion:/mnt/backup/TIEGCM2/saturation_2.0$ nohup: ignoring input and appending output to 'nohup.out'
nohup: failed to run command './Apr_P_200_res5.0.job': No such file or directory
[3]+ Exit 127 nohup ./Apr_P_200_res5.0.job
该文件当然存在,可以通过ls
. 更奇怪的是,当我直接在Linux系统中编写脚本时vi
,它运行起来没有任何问题。当我在Linux中创建脚本文件时,下载到我的Windows7 PC,修改内容但保持文件名不变,然后上传到Linux;脚本文件将毫无问题地运行。但是,如果我在Linux中创建了一个脚本文件,下载到我的Windows7 PC,修改内容和文件名,然后上传到Linux;脚本文件将拒绝运行并抛出“没有这样的文件或目录”错误。
那么有什么问题呢?
解决方案
输出中的以下行表明您的文件中有 dos 行结尾“CR - 回车”。
带 CRLF 线路终结器
尝试运行cat -v your_file
,如果它在每行的末尾显示 ^M,您需要dos2unix
在它们上运行,例如dos2unix your_file
将它们转换为 unix 格式
推荐阅读
- firebase - 如何在移动浏览器上的 firebase 消息中修复 pushSubscription 为空?
- android - 如何将我开发的 android 应用程序作为服务出售给其他应用程序
- python - 将线条的黑白图像矢量化为无粗细的矢量(即坐标)
- mysql - 如何在mysql中使用数学
- ios - 重新定义“FBSDKCoreError”Facebook 登录集成 iOS Objective C
- php - MAMP 和 WP CLI 错误:无法选择数据库
- visual-studio - Visual Studio - Visual Studio 在调试开始时清除中间窗口
- python - Scrapy 无法将文本作为来自导航类的字符串
- flutter - 如何转换列表
列出