未找到 shell 脚本

未找到 shell 脚本

我在 Ubuntu 上使用 shell 脚本时遇到问题。

我的脚本:

#!/bin/bash
/usr/local/bin/node ./index.js
exec bash

我已将其设置为可执行文件:

sudo chmod +x ./index.sh

然后运行它:

sudo ./index.sh

但得到:

sudo: unable to execute ./index.sh: No such file or directory

但是,该文件就在那里:

$ ls -la 
-rwxr-xr-x   1 root root    54 oct.   4 10:05 index.sh

答案1

该脚本曾在 Windows 计算机上进行过编辑。 Windows 上的编辑器通常使用 DOS 行结束符。\r与 Unix 行结束符相比,它们有一个额外的回车符 ( )。当sudo要求内核运行脚本时,这些会使内核感到困惑。

要修复脚本,请运行dos2unix它。

或者,删除\r脚本中的所有内容

$ tr -d '\r' <index.sh >index.sh-new
$ # test index.sh-new to make sure it works
$ mv index.sh-new index.sh

如果脚本依赖于以某种方式处理文字回车,这显然会破坏脚本。

相关内容