我有一个位于“/home/pi/scripts/take-snapshot.sh”的 shell 脚本,但是当我尝试执行它时,我收到一个错误,表明该文件不存在。
以下命令不起作用(假设在脚本目录中):
/home/pi/scripts/take-snapshot.sh
./take-snapshot.sh
take-snapshot.sh
bash /home/pi/scripts/take-snapshot.sh
以下 do 有效并将调出 shell 文件(不是新文件):
vi take-snapshot.sh
nano take-snapshot.sh
最可能的原因是您的文件不可执行。 Bash 有点令人困惑,因为它会将文件报告为“未找到”,即使您没有执行该文件的权限。运行
ls -l
并检查权限。最左边的列至少应为当前用户显示一个“x”。对于您自己创建的文件,它通常看起来像 -rwxr-xr-x
。
如果权限不匹配,请运行
chmod +x take-snapshot.sh
来修复权限。
当行结尾是 Windows EOL 字符时,我看到了此错误。它没有给出任何其他错误,只是上面的“没有文件或目录”。
检查EOL字符并将其转换为linux EOL,如果是windows则尝试再次运行脚本。
我最近遇到了这个错误,因为我的二进制文件是在一个与我尝试运行它的系统(ubuntu vs nixos)截然不同的系统上动态构建的。我现在知道,当可执行文件需要“解释器”(或者,在我的例子中,链接器)位于特定位置(不同于其在运行系统上的位置)时,可能会触发此错误。在与目标匹配的系统上构建二进制文件解决了问题。