我刚刚从 Windows 转到 Linux(Ubuntu 18.04)...并且教程学习 bash 脚本...
我写了一个简单的 shell 脚本
#!bin/bash
echo "Hello World"
但当我尝试使用
$ ./test1.sh
它会抛出一个错误
bash: ./test1.sh: bin/bash: bad interpreter: No such file or directory
当我使用运行时
$ bash test1.sh
它运行良好
我尝试搜索它并找到了很多答案,但由于 Windows 换行符和 ubuntu 换行符之间的一些差异,所有答案都涵盖了错误...我尝试在二进制模式下在 VIM 中打开它(不知道它是什么)但在 bin/bash 之后^M
没有任何标签。^M
请指出我做错的地方。
答案1
你缺少一个前导斜杠,使得shebang成为绝对路径:
#!/bin/bash
# ↑ here
就您而言,shell 似乎正在搜索./bin/bash
。
仅当您将脚本作为程序运行时,才会考虑shebang(以及可执行权限):
$ ./test1.sh
如果直接运行解释器并将脚本作为参数提供,它将被忽略:
$ bash test1.sh
答案2
虽然这是一个老问题,但由于没有解释^M问题,也许它有用:
- ^M来自于“Windows”返回值与Linux返回值的区别。
- 最简单的解决方案是使用编辑器将脚本中的所有返回从 CRLF(Win)转换为 LF(Linux),例如 VS Code。
答案3
抱歉重提旧话题,但我遇到了同样的问题并设法解决了它,不确定到底是什么起了作用,但做了下面列出的所有事情。首先通过以下命令安装 Gedit:
sudo apt-get install gedit
然后确保以 Unix/Linux 行尾保存了脚本。之后,在正确的文件夹中,在终端中输入:
chmod +x filename
最后一件事是在脚本本身中进行替换
#!bin/bash
和
#!/bin/bash