将换行符附加到shell脚本中的输出文件

Ode*_*Ode 28 bash shell cygwin append

我有一个我在Cygwin中执行的shell脚本(也许这就是问题所在).对于这段代码,我只想写第一行,并附加一个换行符:

echo "`date` User `whoami` started the script." >> output.log
echo >> output.log
Run Code Online (Sandbox Code Playgroud)

但是output.log文件似乎永远不会中断.如果我多次运行脚本,就好像第二个echo没有写入文件.

我也尝试过:

echo -e "`date` User `whoami` started the script.\n" >> output.log
Run Code Online (Sandbox Code Playgroud)

它产生相同的结果.

奇怪的是,如果我只是在命令行上输入上面的第二个echo语句,而不附加到文件,它会给我带有尾随换行符的预期输出.

rua*_*akh 31

我打赌问题是Cygwin正在为文件编写Unix行结尾(LF),而你正在用一个期望Windows行结束(CRLF)的程序打开它.要确定是否是这种情况 - 并且对于一些hackish变通方法 - 尝试:

echo "`date` User `whoami` started the script."$'\r' >> output.log
Run Code Online (Sandbox Code Playgroud)

($'\r'最后是一个额外的回车符;它加上Unix行结束,将导致Windows行结束).


Dan*_*ley 21

尝试:

echo "`date` User `whoami` started the script."$'\n' >> output.log
Run Code Online (Sandbox Code Playgroud)

要不就:

echo $'\n' >> output.log
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试

echo -en "`date` User `whoami` started the script.\n" >> output.log
Run Code Online (Sandbox Code Playgroud)

尝试多次发布。我希望您正在寻找相同的输出。


ead*_*ter 5

这也有效,并且 prolly 比 echo 版本更具可读性:

printf "`date` User `whoami` started the script.\r\n" >> output.log
Run Code Online (Sandbox Code Playgroud)