Подтвердить что ты не робот

Добавление прерывания строки к выходному файлу в оболочке script

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

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

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

Я также пробовал:

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

Он дает те же результаты.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Try:

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

или просто:

echo $'\n' >> output.log

Ответ 3

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

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" для эха новой строки.

Ответ 4

Попробуйте

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

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