Терминал прекращает записывать свой вывод в файл, если файл изменен

У меня есть запущенный процесс, который был запущен с помощью

./process | tee -a output.txt

. Поскольку это довольно длительный процесс, выходной файл большой и каждый раз, когда я его открываю, я должен его ждать. для загрузки, а затем прокручивать вниз, что не удобно. Поэтому я решил переместить текущий контент в файл резервной копии output_bak.txt и оставить текущий output.txt пустым, чтобы он содержал только новый вывод. К сожалению, это не сработало. Этот процесс больше не записывается в output.txt.

Мой вопрос в том, как разрешить процессу продолжать писать output.txt?

Заранее спасибо за вашу помощь! [ ! d3]

Обновление. То, что я подразумевал под «перемещением содержимого», фактически копирует содержимое файла в другой файл, а затем удаляет содержимое в текущем файле. Точнее, что я сделал: open output.txt, нажмите Ctrl + A, чтобы скопировать содержимое, затем Ctrl + V в output_bak.txt, затем вернуться к output.txt и Ctrl + A, затем удалить и сохранить.

0
задан 24 April 2018 в 11:36

2 ответа

Вы не можете. Когда вы открываете файл, процесс получает дескриптор файла. Ручка файла не изменяется, даже если файл перемещен или удален. Таким образом, процесс будет записываться в тот же дескриптор файла, который вы переместили в output_bak.txt. Вам нужно будет закрыть файл и снова открыть его.

Вы можете использовать утилиты unix, такие как tail, чтобы просмотреть конец файла. tail -n 20 output.txt выведет последние 20 строк из output.txt.

Хвост также может отображать живое изображение. tail -f output.txt покажет содержимое, как оно записано в файл, в непрерывном потоке, пока вы не прервете его с помощью Ctrl + c.

Это, кстати, работает logrotate. Переместите файл, создайте новый пустой файл и перезапустите процесс записи в файл журнала.

2
ответ дан 17 July 2018 в 16:16

Вы не можете. Когда вы открываете файл, процесс получает дескриптор файла. Ручка файла не изменяется, даже если файл перемещен или удален. Таким образом, процесс будет записываться в тот же дескриптор файла, который вы переместили в output_bak.txt. Вам нужно будет закрыть файл и снова открыть его.

Вы можете использовать утилиты unix, такие как tail, чтобы просмотреть конец файла. tail -n 20 output.txt выведет последние 20 строк из output.txt.

Хвост также может отображать живое изображение. tail -f output.txt покажет содержимое, как оно записано в файл, в непрерывном потоке, пока вы не прервете его с помощью Ctrl + c.

Это, кстати, работает logrotate. Переместите файл, создайте новый пустой файл и перезапустите процесс записи в файл журнала.

2
ответ дан 23 July 2018 в 17:10
  • 1
    Благодарю. На самом деле я не переместил сам файл, а только его содержимое. См. Обновление в вопросе. – Khue 24 April 2018 в 11:36

Другие вопросы по тегам:

Похожие вопросы: