Добавление прерывания строки к выходному файлу в оболочке 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
Он дает те же результаты.
Нечетным является то, что если я просто введу второй оператор эха в командной строке, не добавляя его в файл, он дает мне ожидаемый результат с прерыванием строки.
Ответы
Ответ 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
Попробуйте сделать это несколько раз. Надеюсь, вы ищете тот же результат.