У меня есть что-то вроде mycommand | tee -a mylogfile.log
, но поскольку файл журнала находится на диске, который может повторно соединяться снова и снова, я хочу, чтобы tee
открывал/закрывал файл с каждой записью (скажем, например, с каждой строкой). Есть ли способ сделать что-то подобное?Ищете что-то вроде «tee», но которое открывает/закрывает файл с каждой записью?
1
A
ответ
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; 'в теле цикла, что означает, что запускается меньше исполняемых файлов и т. д. –
вам просто нужен отдельный скрипт для этого. однако, почему у вас будет дисковый накопитель на вашем диске? – HuStmpHrrr
Одним из преимуществ сохранения открытого файла является то, что он остановит вашу систему от повторной установки диска (или, точнее, от его размонтирования - устройство будет занято). –
Причина перезагрузки заключается в том, что это общий диск VirtualBox, и я в основном учитываю возможность приостановки/возобновления работы VM во время выполнения моей команды. – marius