2009-09-03 97 views
3
#!/bin/bash 
echo 'first line' >foo.xml 
echo 'second line' >>foo.xml 

我是一个shell脚本的新手。简单的shell脚本在cygwin

我想在cygwin中运行上面的脚本。我希望能够将一行接一行写入新文件。

然而,当我执行上面的脚本中,我看到了follwoing内容foo.xml:

second line 

我第二次运行该脚本,我看到foo.xml:

second line 
second line 

等等。

另外,我看到在命令提示符下显示以下错误运行该脚本后:

: No such file or directory.xml 

我最终将在Unix下运行此脚本,我只是想用Cygwin来发展它。所以,如果你能指出它是否是一个怪异的cygwin,我将不胜感激,如果是的话,我应该避免尝试使用cygwin来开发这样的脚本吗?

在此先感谢。

回答

7

在你的shell脚本上运行dos2unix。这将解决问题。

+0

是的。就是这样!谢谢!! – Kapsh 2009-09-03 19:57:28

+0

很高兴我能帮忙,伙计。 – 2009-09-03 19:58:01

1

但是在这里一定有其他的东西是错的。当我尝试它时,它按预期工作。

> foo.xml将该行放入foo.xml中,替换之前的任何内容。 >> foo.xml追加到文件

+0

你在cywgin? – Kapsh 2009-09-03 19:52:31

0

这听起来像你可能有一个错字的地方。另外请记住,虽然Windows命令提示符可以原谅带有嵌入空格的路径,但cygwin的shell不会,因此如果您的文件名包含嵌入的空格,则需要引用文件名或转义空格:

echo 'first line' > 'My File.txt' 
echo 'first line' > My\ File.txt 

对于某些“特殊”字符(包括引号,和号(&),分号(;)以及除句点/句号(。)以外的一般标点符号)也是如此。

因此,如果您使用您正在运行的确切脚本查看这些问题(即您复制并粘贴它,不存在转录错误的可能性),那么可能会发生一些我无法解释的真正奇怪的事情。否则,某处可能存在错位的空间或未加引号的字符。

0

我无法重现您的结果。您引用的脚本看起来是正确的,并且在我的Cygwin安装过程中的预期效果如此,生成包含行first linesecond line的文件foo.xml;这意味着你实际运行的内容与你引用问题的方式不同。

错误消息意味着第一个echo行中的文件名存在某种问题。你正在运行的脚本中是否有一些不可打印的字符?你错过了逃离文件名空间吗?你是在用shell变量进行替换,并且忘记了变量的名字或者没有转义结果字符串?

1

以上应正常工作.. 但是你总是可以指定一个定界符:

#!/bin/bash 
cat <<EOF > foo.xml 
first line 
second line 
EOF