我正在通过本教程学习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
,但这不起作用..
答案 0 :(得分:452)
在Windows环境中创建脚本然后移植到Unix环境中运行时,我看到了这个问题。
尝试在脚本上运行dos2unix
:
http://dos2unix.sourceforge.net/
或者只是使用vi
和测试。
Unix使用不同的行结尾,因此无法读取您在Windows上创建的文件。因此,它将^ M视为非法角色。
如果您想在Windows上编写文件然后移植,请确保您的编辑器设置为以UNIX格式创建文件。
在屏幕右下方的notepad ++中,它会告诉您文档格式。默认情况下,它会显示Dos\Windows
。要改变它,请转到
答案 1 :(得分:387)
在终端
中运行以下命令sed -i -e 's/\r$//' scriptname.sh
然后尝试
./scriptname.sh
它应该有用。
答案 2 :(得分:113)
如果您在Windows或Mac上使用 Sublime Text 来编辑脚本:
点击View > Line Endings > Unix
再次保存文件。
答案 3 :(得分:44)
这是由在Windows中编辑文件以及在unix中导入和执行引起的。
dos2unix -k -o filename
应该可以解决问题。
答案 4 :(得分:31)
在notepad ++中,您可以通过按
专门为文件设置它编辑 - > EOL转换 - > UNIX / OSX格式
答案 5 :(得分:10)
dos2unix file_name
注意:您可能需要先使用yum install 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Α, ¶)
更改文件编码:
或者将New text file line delimiter
更改为Other: Unix
面板上的Window > Preferences > General > Workspace
:
答案 8 :(得分:3)
我可以通过打开 Gedit 中的脚本并使用正确的Line Ending
选项保存它来解决此问题:
档案>另存为......
在Save As
提示的左下角,有用于字符编码和行结尾的下拉菜单。将结束时间从Windows
更改为Unix/Linux
,然后保存。
答案 9 :(得分:1)
Atom有一个内置的行结束选择器包
答案 10 :(得分:-1)
我同时在Windows和Mac / Linux上开发,我通过像在Windows中一样运行脚本来避免这种错误:
$ php ./my_script
无需更改行结尾。