2009-09-03 72 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