bin/bash: bad interpreter: 没有那个文件或目录

Shu*_*dey 3 command-line bash

我刚刚从 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 之后标记。

请建议我做错了什么。

Mel*_*ius 9

您缺少一个前斜杠,使 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问题的解释,也许它很有用:

  • ^M来自“Windows”返回和Linux返回之间的区别。
  • 最简单的解决方案是使用编辑器将脚本中的所有返回从 CRLF (Win) 转换为 LF (Linux),例如 VS Code。