这个问题在这里已有答案:
我正在通过本教程学习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 回答
在Windows环境中创建脚本然后移植到Unix环境中运行时,我已经看到了这个问题 .
尝试在脚本上运行
dos2unix
:http://dos2unix.sourceforge.net/
或者只是使用
vi
并测试在Unix env中重写脚本 .Unix使用不同的行结尾,因此无法读取您在Windows上创建的文件 . 因此它将^ M视为非法角色 .
如果要在Windows上编写文件然后移植,请确保将编辑器设置为以UNIX格式创建文件 .
在屏幕右下方的记事本中,它会告诉您文档格式 . 默认情况下,它会说
Dos\Windows
. 要改变它去settings-> preferences
新文档/默认目录选项卡
选择格式为unix并关闭
创建一个新文档
在终端中运行以下命令
然后试试
它应该工作 .
如果您在Windows或Mac上使用 Sublime Text 来编辑脚本:
再次单击
View > Line Endings > Unix
和 save 文件 .这是由在Windows中编辑文件以及在unix中导入和执行引起的 .
dos2unix -k -o filename
应该做的伎俩 .在记事本中,您可以通过按键专门为文件设置它
编辑 - > EOL转换 - > UNIX / OSX格式
问题是dos线结束 . 以下将转换为unix
注意:您可能需要首先使用
yum install dos2unix
安装dos2unix另一种方法是使用
sed
命令搜索并将dos行结束符替换为unix格式:您的文件有Windows行结尾,这让Linux感到困惑 .
删除虚假的CR字符 . 您可以使用以下命令执行此操作:
对于Eclipse用户,您可以直接从菜单
File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶)
更改文件编码:或者在
Window > Preferences > General > Workspace
面板上将New text file line delimiter
更改为Other: Unix
:我能够通过打开 Gedit 中的脚本并使用正确的
Line Ending
选项保存它来解决此问题:在
Save As
提示的左下角,有用于字符编码和行结束的下拉菜单 . 将行结束从Windows
更改为Unix/Linux
然后保存 .![gedit "Save As" prompt]](https://www.javaroad.cn/files/images/ba23ee5e-5dc2-4a8d-9132-465bd16f9b27.png)
Atom有一个内置的行结束选择器包
更多细节:https://github.com/atom/line-ending-selector
我同时在Windows和Mac / Linux上开发,我通过像在Windows中一样运行我的脚本来避免这个^ M错误:
$ php ./my_script
无需更改行结尾 .