#!/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来开发这样的脚本吗?
提前致谢。
答案 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 line
和second line
的文件foo.xml;意味着您实际运行的内容与您引用问题的方式不同。
错误消息表示第一个echo
行中的文件名存在某种问题。您正在运行的脚本中是否有一些不可打印的字符?你错过了文件名中的空格吗?您是否在使用shell变量并错误地输入变量名称或者无法转义结果字符串?
答案 5 :(得分:0)
以上应该正常工作.. 但是,您始终可以指定heredoc:
#!/bin/bash
cat <<EOF > foo.xml
first line
second line
EOF