首页 文章

-bash:./ my_script:/ bin / bash ^ M:错误的解释器:没有这样的文件或目录[重复]

提问于
浏览
300

这个问题在这里已有答案:

我正在通过本教程学习bash scripts为我自动完成一些任务 . 我正在使用putty连接到服务器 .

该脚本位于 .../Documents/LOG ,是:

#!/bin/bash
# My first script
echo "Hello World!"

我为读/写/执行权限执行了以下操作

chmod 755 my_script

然后,当我输入 ./my_script 时,我收到 Headers 中给出的错误 .

一些类似的问题想看到这些,所以我认为它们可能有所帮助:

which bash

/ bin / bash

echo $PATH

/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / bin / mh

我尝试将当前目录添加到 PATH ,但这不起作用..

11 回答

  • 27

    在Windows环境中创建脚本然后移植到Unix环境中运行时,我已经看到了这个问题 .

    尝试在脚本上运行 dos2unix

    http://dos2unix.sourceforge.net/

    或者只是使用 vi 并测试在Unix env中重写脚本 .

    Unix使用不同的行结尾,因此无法读取您在Windows上创建的文件 . 因此它将^ M视为非法角色 .

    如果要在Windows上编写文件然后移植,请确保将编辑器设置为以UNIX格式创建文件 .

    在屏幕右下方的记事本中,它会告诉您文档格式 . 默认情况下,它会说 Dos\Windows . 要改变它去

    • settings-> preferences

    • 新文档/默认目录选项卡

    • 选择格式为unix并关闭

    • 创建一个新文档

  • 4

    在终端中运行以下命令

    sed -i -e 's/\r$//' scriptname.sh
    

    然后试试

    ./scriptname.sh
    

    它应该工作 .

  • 1

    如果您在Windows或Mac上使用 Sublime Text 来编辑脚本:

    再次单击 View > Line Endings > Unixsave 文件 .

    enter image description here

  • 104

    这是由在Windows中编辑文件以及在unix中导入和执行引起的 .

    dos2unix -k -o filename 应该做的伎俩 .

  • 43

    在记事本中,您可以通过按键专门为文件设置它

    编辑 - > EOL转换 - > UNIX / OSX格式

    enter image description here

  • -1

    问题是dos线结束 . 以下将转换为unix

    dos2unix file_name
    

    注意:您可能需要首先使用 yum install dos2unix 安装dos2unix

    另一种方法是使用 sed 命令搜索并将dos行结束符替换为unix格式:

    $sed -i -e 's/\r$//' your_script.sh
    
  • 3

    您的文件有Windows行结尾,这让Linux感到困惑 .

    删除虚假的CR字符 . 您可以使用以下命令执行此操作:

    $ sed -i -e 's/\r$//' setup.sh
    
  • 327

    对于Eclipse用户,您可以直接从菜单 File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶) 更改文件编码:

    Eclipse change file encoding

    或者在 Window > Preferences > General > Workspace 面板上将 New text file line delimiter 更改为 Other: Unix

    Eclipse workspace settings

  • 9

    我能够通过打开 Gedit 中的脚本并使用正确的 Line Ending 选项保存它来解决此问题:

    文件>另存为...

    Save As 提示的左下角,有用于字符编码和行结束的下拉菜单 . 将行结束从 Windows 更改为 Unix/Linux 然后保存 .

    ![gedit "Save As" prompt]](https://www.javaroad.cn/files/images/ba23ee5e-5dc2-4a8d-9132-465bd16f9b27.png)

  • 7

    Atom有一个内置的行结束选择器包

    更多细节:https://github.com/atom/line-ending-selector

  • 391

    我同时在Windows和Mac / Linux上开发,我通过像在Windows中一样运行我的脚本来避免这个^ M错误:

    $ php ./my_script

    无需更改行结尾 .

相关问题