I have a shell script that I am executing in Cygwin (maybe this is the problem). For this bit of code, I simply want to write the first line, and append a line break:
echo "`date` User `whoami` started the script." >> output.log
echo >> output.log
But the output.log file never seems to take the break. If I run the script multiple times, it's as if the second echo doesn't write to the file.
I've also tried:
echo -e "`date` User `whoami` started the script.\n" >> output.log
It yields the same results.
The odd thing is if I just enter the second echo statement above on the command line, without appending to the file, it gives me the expected output with the trailing line break.
I'm betting the problem is that Cygwin is writing Unix line endings (LF) to the file, and you're opening it with a program that expects Windows line-endings (CRLF). To determine if this is the case — and for a bit of a hackish workaround — try:
(where the
$'\r'
at the end is an extra carriage-return; it, plus the Unix line ending, will result in a Windows line ending).Try:
or just:
Try
Try issuing this multiple times. I hope you are looking for the same output.
You can do that without an I/O redirection:
You can also use this command to append a newline to a list of files:
For
echo
, some shells implement it as a shell builtin command. It might not accept the-e
option. If you still want to useecho
, try to find where theecho
binary file is, usingwhich echo
. In most cases, it is located in/bin/echo
, so you can use/bin/echo -e "\n"
to echo a new line.