Добавление разрыва строки к выходному файлу в сценарии оболочки - PullRequest
25 голосов
/ 16 марта 2012

У меня есть сценарий оболочки, который я выполняю в Cygwin (возможно, это проблема).Для этого фрагмента кода я просто хочу написать первую строку и добавить разрыв строки:

echo "`date` User `whoami` started the script." >> output.log
echo >> output.log

Но файл output.log, кажется, никогда не берет разрыв.Если я запускаю сценарий несколько раз, это как если бы второе эхо не записывало в файл.

Я также пытался:

echo -e "`date` User `whoami` started the script.\n" >> output.log

Это дает те же результаты.

Странно, если я просто введу второй оператор echo выше в командной строке, не добавляя в файл, он даст мне ожидаемый результат с разрывом завершающей строки.

Ответы [ 4 ]

28 голосов
/ 16 марта 2012

Бьюсь об заклад, проблема в том, что Cygwin записывает в файл окончания строк Unix (LF), и вы открываете его с помощью программы, которая ожидает окончания строк Windows (CRLF). Чтобы определить, так ли это, & mdash; и для немного хакерского обходного пути & ndash; попробовать:

echo "`date` User `whoami` started the script."$'\r' >> output.log

(где $'\r' в конце - дополнительный возврат каретки; это, плюс конец строки Unix, приведет к окончанию строки Windows).

20 голосов
/ 16 марта 2012

Попробуйте:

echo "`date` User `whoami` started the script."$'\n' >> output.log

или просто:

echo $'\n' >> output.log
3 голосов
/ 08 августа 2014

Попробуйте

echo -en "`date` User `whoami` started the script.\n" >> output.log

Попробуйте выдать это несколько раз. Я надеюсь, что вы ищете тот же вывод.

3 голосов
/ 27 ноября 2013

Вы можете сделать это без перенаправления ввода / вывода:

sed -i 's/$/\n/' filename

Вы также можете использовать эту команду для добавления новой строки в список файлов:

find dir -name filepattern | xargs sed -i 's/$/\n/' filename

Для echo, некоторые оболочки реализуют его как встроенную команду оболочки.Может не принять опцию -e.Если вы все еще хотите использовать echo, попробуйте найти, где находится двоичный файл echo, используя which echo.В большинстве случаев он находится в /bin/echo, поэтому вы можете использовать /bin/echo -e "\n" для вывода новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...