2015-08-23 7 views
1

У меня есть что-то вроде mycommand | tee -a mylogfile.log, но поскольку файл журнала находится на диске, который может повторно соединяться снова и снова, я хочу, чтобы tee открывал/закрывал файл с каждой записью (скажем, например, с каждой строкой). Есть ли способ сделать что-то подобное?Ищете что-то вроде «tee», но которое открывает/закрывает файл с каждой записью?

+1

вам просто нужен отдельный скрипт для этого. однако, почему у вас будет дисковый накопитель на вашем диске? – HuStmpHrrr

+0

Одним из преимуществ сохранения открытого файла является то, что он остановит вашу систему от повторной установки диска (или, точнее, от его размонтирования - устройство будет занято). –

+0

Причина перезагрузки заключается в том, что это общий диск VirtualBox, и я в основном учитываю возможность приостановки/возобновления работы VM во время выполнения моей команды. – marius

ответ

1

Это открывать и закрывать mylogfile.log с каждой строкой:

mycommand | while IFS= read -r line; do printf "%s\n" "$line" | tee -a mylogfile.log; done 

С Баш, это может быть несколько упрощено:

mycommand | while IFS= read -r line; do tee -a mylogfile.log <<<"$line"; done 
+0

Работает красиво и лаконично, спасибо! – marius

+1

Вы также можете просто сделать: 'echo '$ line"; echo "$ line" >> mylogfile.log; 'в теле цикла, что означает, что запускается меньше исполняемых файлов и т. д. –