-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
然后保存。
对于Eclipse用户,您可以直接从菜单File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶)
更改文件编码:
或者将New text file line delimiter
更改为Other: Unix
Window > Preferences > General > Workspace
面板:
Atom有一个内置的行尾select器包
更多细节在这里: https : //github.com/atom/line-ending-selector
我同时在Windows和Mac / Linux上开发,通过像在Windows中一样简单地运行脚本,避免了这种^ M错误:
$ php ./my_script
不需要改变行结束。