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

时间:2013-01-08 16:03:35

标签: bash

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

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

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

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

chmod 755 my_script

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

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

which bash
  

/斌/庆典

echo $PATH
  

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

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

11 个答案:

答案 0 :(得分:452)

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

尝试在脚本上运行dos2unix

http://dos2unix.sourceforge.net/

或者只是使用vi和测试。

重写Unix env中的脚本

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

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

在屏幕右下方的notepad ++中,它会告诉您文档格式。默认情况下,它会显示Dos\Windows。要改变它,请转到

  • 设置 - >偏好设置
  • 新文档/默认目录标签
  • 选择格式为unix并关闭
  • 创建新文档

答案 1 :(得分:387)

在终端

中运行以下命令
sed -i -e 's/\r$//' scriptname.sh

然后尝试

./scriptname.sh

它应该有用。

答案 2 :(得分:113)

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

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

enter image description here

答案 3 :(得分:44)

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

dos2unix -k -o filename应该可以解决问题。

答案 4 :(得分:31)

在notepad ++中,您可以通过按

专门为文件设置它

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

enter image description here

答案 5 :(得分:10)

问题是dos行结束。以下将转换为unix

dos2unix file_name

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

安装dos2unix

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

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

答案 6 :(得分:7)

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

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

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

答案 7 :(得分:4)

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

Eclipse change file encoding

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

Eclipse workspace settings

答案 8 :(得分:3)

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

  

档案>另存为......

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

gedit "Save As" prompt]

答案 9 :(得分:1)

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

此处有更多详情:https://github.com/atom/line-ending-selector

答案 10 :(得分:-1)

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

$ php ./my_script

无需更改行结尾。