Unix cygwin中的简单shell脚本
我对shell脚本完全是个新手 我正在尝试在cygwin中运行上述脚本。我希望能够将一行接一行写入新文件 但是,当我执行上述脚本时,我在foo.xml中看到了以下内容:Unix cygwin中的简单shell脚本,unix,shell,cygwin,Unix,Shell,Cygwin,我对shell脚本完全是个新手 我正在尝试在cygwin中运行上述脚本。我希望能够将一行接一行写入新文件 但是,当我执行上述脚本时,我在foo.xml中看到了以下内容: #!/bin/bash echo 'first line' >foo.xml echo 'second line' >>foo.xml second line 第二次运行脚本时,我在foo.xml中看到: #!/bin/bash echo 'first line' >foo.xml echo 'sec
#!/bin/bash
echo 'first line' >foo.xml
echo 'second line' >>foo.xml
second line
第二次运行脚本时,我在foo.xml中看到:
#!/bin/bash
echo 'first line' >foo.xml
echo 'second line' >>foo.xml
second line
等等
此外,运行脚本后,我在命令提示符处看到以下错误:
second line
second line
我最终将在unix机器上运行这个脚本,我只是尝试使用cygwin开发它。所以,如果您能指出这是否是cygwin的怪癖,我将不胜感激。如果是,我是否应该避免尝试使用cygwin来开发此类脚本
提前谢谢。但是这里肯定有别的地方不对。当我尝试它的时候,它就像预期的那样工作
>foo.xml
将该行放入foo.xml,替换以前的任何内容。
>foo.xml
附加到文件中听起来您可能在某个地方有打字错误。还请记住,虽然Windows命令提示符可以原谅带有嵌入空格的路径,但cygwin的shell不会,因此如果文件名包含嵌入空格,则需要引用文件名或转义空格:
: No such file or directory.xml
某些“特殊”字符也是如此,包括引号、符号(&)、分号(;)和除句号/句号(.)以外的大多数标点符号
因此,如果您使用正在运行的脚本看到这些问题(即,您复制并粘贴了它,不存在转录错误的可能性),那么可能会发生一些我无法解释的真正奇怪的事情。否则,某个地方可能有空格或未加引号的字符。我无法复制您的结果。您引用的脚本看起来是正确的,在我这里安装的Cygwin中,它确实按照预期工作,生成了foo.xml文件,其中包含
第一行和第二行
;暗示您实际运行的内容与您引用的内容在某种程度上不同,从而导致问题
错误消息意味着第一行echo
中的文件名存在某种问题。您正在运行的脚本中是否有一些不可打印的字符?您是否错过了转义文件名中的空格?您是否正在替换shell变量并错误键入变量名称,或未能转义结果字符串?在shell脚本上运行dos2unix。这将解决问题。上述各项应能正常工作。。
但是,您始终可以指定一个heredoc:
echo 'first line' > 'My File.txt'
echo 'first line' > My\ File.txt
#/bin/bash
cat我遇到了与原始海报相同的问题:一个非常简单的脚本文件在Cygwin中不起作用
感谢唐·布兰森提供的线索。
我使用的文本编辑器内置了对我的修复。(大多数程序员的编辑器都有这样的功能。)例如,在我的例子中,我使用的是Notepad++,它有一个菜单项将文件行结尾转换为Unix样式。从菜单:[编辑]->[EOL转换]->[Unix(LF)]
然后脚本按预期运行。是。就这样!非常感谢。