我刚刚从 Windows 转移到 Linux (Ubuntu 18.04)……并按照教程学习 bash 脚本……
我写了一个简单的shell脚本
#!bin/bash
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用它运行它时
$ ./test1.sh
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误
bash: ./test1.sh: bin/bash: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当我运行它时使用
$ bash test1.sh
Run Code Online (Sandbox Code Playgroud)
它运行良好
我尝试搜索它并找到了很多答案,但由于 windows 换行符^M和 ubuntu 换行符之间存在一些差异,所有的错误都包含在内......我尝试在二进制模式下在 VIM 中打开它(不知道它是什么)但它没有任何^M在 bin/bash 之后标记。
请建议我做错了什么。
您缺少一个前斜杠,使 shebang 成为绝对路径:
#!/bin/bash
# ? here
Run Code Online (Sandbox Code Playgroud)
在您的情况下,外壳似乎正在搜索./bin/bash.
仅当您将脚本作为程序运行时,才会考虑 shebang(以及可执行权限):
$ ./test1.sh
Run Code Online (Sandbox Code Playgroud)
如果您直接运行解释器并提供您的脚本作为参数,它将被忽略:
$ bash test1.sh
Run Code Online (Sandbox Code Playgroud)
另见:https : //askubuntu.com/a/850387/250300
小智 6
虽然这是一个老问题,但由于没有对^M问题的解释,也许它很有用: