我在 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
如果脚本依赖于以某种方式处理文字回车,这显然会破坏脚本。