首页 > 解决方案 > 当我尝试运行从 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;脚本文件将拒绝运行并抛出“没有这样的文件或目录”错误。

那么有什么问题呢?

标签: linuxwindowsbashdebian-based

解决方案


输出中的以下行表明您的文件中有 dos 行结尾“CR - 回车”。

带 CRLF 线路终结器

尝试运行cat -v your_file,如果它在每行的末尾显示 ^M,您需要dos2unix在它们上运行,例如dos2unix your_file将它们转换为 unix 格式


推荐阅读