cygwin中的简单shell脚本

时间:2009-09-03 19:45:11

标签: unix shell cygwin

#!/bin/bash
echo 'first line' >foo.xml
echo 'second line' >>foo.xml

我是shell脚本的新手。

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

但是,当我执行上面的脚本时,我会看到foo.xml中的以下内容:

second line

第二次运行脚本时,我在foo.xml中看到:

second line
second line

等等。

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

: No such file or directory.xml

我最终将在unix框上运行此脚本,我只是尝试使用cygwin开发它。所以如果你能指出它是否是一个cygwin奇怪的话我会很感激,如果是的话,我应该避免尝试使用cygwin来开发这样的脚本吗?

提前致谢。

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

我和原始海报有同样的问题:Cygwin中没有一个非常简单的脚本文件。

感谢唐·布兰森的线索。
对我来说,此修复程序已内置到我正在使用的文本编辑器中。 (大多数程序员的编辑器都具有这样的功能。)例如,在我的情况下,我使用的是Notepad ++,它具有一个菜单项,可将文件行结尾转换为Unix风格。从菜单中:[编辑]-> [EOL转换]-> [Unix(LF)]

然后脚本按预期方式运行。

答案 2 :(得分:1)

但这里肯定有其他错误。当我尝试它时,它按预期工作。

> foo.xml将行放入foo.xml,替换以前的所有内容。 >> foo.xml附加到文件

答案 3 :(得分:0)

听起来你可能在某个地方有拼写错误。还要记住,虽然Windows命令提示符可以原谅带嵌入空格的路径,但cygwin的shell不会,所以如果你有一个包含嵌入空格的文件名,你需要引用文件名或转义空格:

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

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

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

答案 4 :(得分:0)

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

错误消息表示第一个echo行中的文件名存在某种问题。您正在运行的脚本中是否有一些不可打印的字符?你错过了文件名中的空格吗?您是否在使用shell变量并错误地输入变量名称或者无法转义结果字符串?

答案 5 :(得分:0)

以上应该正常工作.. 但是,您始终可以指定heredoc:

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