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

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

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

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

我执行以下读/写/执行权限

 chmod 755 my_script 

然后,当我input./my_script ,我得到了标题中给出的错误。

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

 which bash 

/斌/庆典

 echo $PATH 

在/ usr / local / sbin中:在/ usr / local / bin目录:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏:在/ usr / bin中/ MH

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

在Windows环境下创build脚本,然后移植到Unix环境下运行时,我看到了这个问题。

尝试在脚本上运行这个:

http://linuxcommand.org/man_pages/dos2unix1.html

更新的链接:

http://dos2unix.sourceforge.net/

或者只是使用vi和testing在Unix环境中重写脚本。

Unix使用不同的换行符和回车符,因此无法读取您在Windows上创build的文件。 因此它将“M”视为非法字符。

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

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

  • 设置 – >首选项
  • 新文件/默认目录选项卡
  • select格式为unix并closures
  • 创build一个新文档

在terminal运行以下命令

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

然后尝试

 ./scriptname.sh 

它应该工作。

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

点击View > Line Endings > Unix并再次保存文件。

在这里输入图像说明

这是由于在Windows中编辑文件和在UNIX中导入和执行。

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

在记事本++中,你可以通过按下来为文件设置它

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

在这里输入图像说明

问题是与DOS线结束。 以下将转换为unix

 dos2unix file_name 

注意:你可能需要先安装dos2unix,然后安装yum install dos2unix

另一种方法是使用sed命令来search和replacedos行结束字符为unix格式:

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

你的文件有Windows行结尾,这是令人困惑的Linux。

删除虚假的CR字符。 你可以用下面的命令来完成它:

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

我可以通过在Gedit中打开脚本并使用适当的Line Ending选项来保存脚本来解决问题:

文件>另存为…

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

gedit“另存为”提示]

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

Eclipse更改文件编码

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

Eclipse工作区设置

Atom有一个内置的行尾select器包

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

我同时在Windows和Mac / Linux上开发,通过像在Windows中一样简单地运行脚本,避免了这种^ M错误:

$ php ./my_script

不需要改变行结束。