首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >bin/bash:糟糕的解释器:没有这样的文件或目录

bin/bash:糟糕的解释器:没有这样的文件或目录
EN

Ask Ubuntu用户
提问于 2019-07-16 06:38:32
回答 3查看 59.8K关注 0票数 10

我刚从Windows转到Linux (Ubuntu18.04)...and,跟随教程学习bash脚本.

我写了一个简单的shell脚本

代码语言:javascript
代码运行次数:0
运行
复制
#!bin/bash 

echo "Hello World" 

但是当我试图运行它的时候

代码语言:javascript
代码运行次数:0
运行
复制
$ ./test1.sh

它会抛出一个错误

代码语言:javascript
代码运行次数:0
运行
复制
bash: ./test1.sh: bin/bash: bad interpreter: No such file or directory

当我运行它时使用

代码语言:javascript
代码运行次数:0
运行
复制
$ bash test1.sh

它运行得很好

我尝试搜索它并找到了许多答案,但是由于windows新行^M和ubuntu之间的一些差异,所有这些都包含了错误.我尝试在二进制模式下打开它(不知道它是什么),但是它在bin/bash之后没有任何^M标记。

请建议我做错了什么。

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2019-07-16 06:40:48

你错过了一个前导的斜线,使它成为一条绝对的道路:

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
# ↑ here

在您的例子中,shell似乎在搜索./bin/bash

只有当您将脚本作为程序运行时,才会考虑到shebang (以及可执行权限):

代码语言:javascript
代码运行次数:0
运行
复制
$ ./test1.sh

如果直接运行解释器并将脚本作为参数提供,则会忽略它:

代码语言:javascript
代码运行次数:0
运行
复制
$ bash test1.sh

另见:https://askubuntu.com/a/850387/250300

票数 17
EN

Ask Ubuntu用户

发布于 2021-01-05 07:32:37

虽然这是一个老问题,但由于对^M问题没有任何解释,也许它是有用的:

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

Ask Ubuntu用户

发布于 2020-03-10 14:11:55

抱歉,让我想起了旧的话题,但我有同样的问题,并设法解决了它,不知道到底有什么帮助,但做了以下所有的事情。首先,通过命令安装Gedit:

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get install gedit

然后确保以Unix/Linux行结尾保存脚本。在此之后,键入终端,同时在正确的文件夹中:

代码语言:javascript
代码运行次数:0
运行
复制
chmod +x filename

最后一件事是替换脚本本身。

代码语言:javascript
代码运行次数:0
运行
复制
#!bin/bash 

使用

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash 
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1158577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档