Bash脚本-“/bin/ Bash”^M: bad interpreter: No such file or directory"

我正在使用本教程学习bash脚本来自动化一些 给我的任务。< br / > I'm connect to a server using putty.

.

.

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

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

我为read/write/execute permissions执行了以下命令

chmod 755 my_script

然后,当我输入./my_script,我得到的错误给出的 标题。< / p > 一些类似的问题想看到这些,所以我认为他们可能会 帮助:< / p >

$ which bash
/bin/bash

而且

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin/mh
我尝试将当前目录添加到PATH,但这没有 工作…< / p >
975463 次浏览

在Windows环境中创建脚本,然后移植到Unix环境中运行时,我就遇到过这个问题。

试着在脚本上运行dos2unix:

http://dos2unix.sourceforge.net/

或者在Unix环境中使用vi重新编写脚本并进行测试。

Unix使用不同的行结束符,因此无法读取您在Windows上创建的文件。因此,它将^M视为一个非法字符。

如果您想在Windows上编写一个文件,然后将其移植,请确保您的编辑器设置为以UNIX格式创建文件。

在屏幕右下方的notepad++中,它告诉你文档的格式。默认情况下,它将显示Dos\Windows。去改变它

  • 设置- >首选项
  • 新建文档/默认目录选项卡
  • 选择Unix格式并关闭
  • 创建一个新文档

这是由于在windows中编辑文件和在unix中导入和执行造成的。

dos2unix -k -o filename应该可以做到。

如果你在Windows或Mac上使用崇高的文本编辑你的脚本:

再次单击文件View > Line Endings > Unix保存

enter image description here

在notepad++中,您可以通过按下为文件设置它

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

enter image description here

在终端中执行以下命令

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

那就试试

./scriptname.sh

它应该会起作用。

您的文件有Windows行结束符,这让Linux感到困惑。

删除虚假的CR字符。您可以通过以下命令来完成:

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

我能够通过在中用户中打开脚本并使用适当的Line Ending选项保存它来解决这个问题:

文件比;另存为…

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

选择

问题是与DOS行结束。下面将把它转换为unix

dos2unix file_name

注意:你可能需要先用yum install dos2unix安装dos2unix

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

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

我同时在Windows和Mac/Linux上开发,我通过简单地运行我的脚本来避免这个^ m错误,就像我在Windows上做的那样:

# EYZ0

不需要更改行结束符。

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

Eclipse更改文件编码

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

Eclipse workspace settings

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

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