2011-12-27 92 views
11

我是Bash脚本的新手。我运行在Ubuntu下面这个简单的脚本:Ubuntu Bash无法理解的Bash脚本

sudo bash -x Script.sh 

输出:

+ $'\r' 
: command not found 
+ $'\r' 
: command not found 
+ $'\r' 
: command not found 
+ adminEmail=$'[email protected]\r' 
+ $'\r' 
: command not found 
' echo 'database name: 
database name: 
+ read $'dbname\r' 

实际的脚本:

#!/bin/bash 

# Installation script for latest Wordpress website on Ubuntu 
# 
# Kave 
# December 27, 2011 


adminEmail="[email protected]" 

echo "database name:" 
read dbname 

这都是什么'\r'错误消息来了?即使评论似乎不被理解......

+0

看起来你有行尾问题,但我不知道如何解决这个问题? – evotopid 2011-12-27 18:46:37

+0

这对我的作品...拱Linux i686 – Paul 2011-12-27 18:46:57

+1

从命令行执行'dos2unix scriptname scriptname'。 '\ r'是回车符,你是在Windows机器上创建文件并发送给linux的? – 2011-12-27 18:49:20

回答

10

您通过Windows机器下载了该文件,并且您有CRLF行结尾(即C和相关语言中的\r\n)。

删除DOS行尾。例如,编辑vim中的文件并使用:set fileformat=unix(加上返回)更改格式,然后将文件写回。替代技术可以使用tr命令或dos2unixdtou,具体取决于可用的内容。

1

剪切和从该页面的代码粘贴到你的Ubuntu的编辑器,所以你会得到你的固定线路的结局(\r\n在Windows VS \n在Linux为例)

如果你将它保存为新文件我相信它会正常工作。

1

听起来像文件中有一些无关的不可打印的字符。
使用vi/Vim的文件:
[ESC]进入命令行模式
然后键入:set list

+0

一旦你列出了角色,你将如何去除它们?欢迎来到StackOverflow。你的回答非常正确,但还没有完成。 – 2011-12-27 18:53:04

11

根本就

dos2unix scriptname 

并执行脚本。

如果您没有该工具,则可以执行以下操作来安装它。

sudo apt-get install dos2unix 

OR

执行下面的命令行黑客将文件转换。

tr -d '\015' <scriptname> scriptname.new 

OR

sed -i 's/\x0D$//' scriptname 
+0

非常感谢.... – Houman 2011-12-27 20:05:23