Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix cygwin中的简单shell脚本_Unix_Shell_Cygwin - Fatal编程技术网

Unix cygwin中的简单shell脚本

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

我对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 '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)]


然后脚本按预期运行。

是。就这样!非常感谢。