Я использую nohup
для выполнения команды на удаленном сервере в фоновом режиме и использую файл nohup.out
для проверки хода выполнения. Могу ли я настроить nohup
на перезапись nohup.out
, поскольку он содержит только одну строку (последний стандартный вывод)?
Нет варианта того, что вы просите, ни во внешней nohup
, ни во внешней реализации оболочки. Пара альтернативных идей:
Обрезать файл с перенаправлением. Примерно так: nohup firefox 2> & 1> nohup.out &
. Обычно то же самое, но только вручную.
rm
перед запуском новой команды. Примерно так: rm nohup.out; nohup firefox 2> & 1 &
Из комментариев кажется, что пользователь хочет иметь возможность проверить выходной файл, а затем очистить его перед повторной проверкой.
Для этого запустите программу с >>
перенаправлением на выходной файл:
$ somecommand >>logfile &
Затем прочтите logfile
как хотите. Если вы хотите очистить файл, просто выполните
$ >logfile
Это приведет к усечению файла, но оставит его на месте. Когда программа в следующий раз записывает в выходной файл, она будет писать в начало файла.
Мы используем >>
, чтобы открыть файл в «режиме добавления». Это означает, что любая новая запись в файл всегда будет происходить в (текущем )конце файла.
Если бы мы использовали >
, а затем усекли файл, новые записи в файл произошли бы в той точке файла, где они были первоначально размещены. Это означает, что область между началом файла и новым содержимым была бы заполнена нулевыми -байтами.
Просто используя nohup
без перенаправления файл nohup.out
записывается в append mode
.
Поэтому усечение файла после проверки командой
> nohup.out
устанавливает нулевую длину файла, а последующий вывод программы записывается в nohup.out
в начале файла.
Это именно то, о чем говорится в приведенном выше ответе на вопрос -, и это работает. Это может быть полезно для длительного вывода, когда после проверки текущего состояния прогона содержимое файла больше не представляет интереса.
Как указывалось в вопросе, вывод программы - это всего одна строка, поэтому rm nohup.out
перед следующим вызовом дает тот же результат, что и > nohup.out
, с той лишь разницей, что файл не существует после его удаления, пока он существует. в противном случае остается файлом нулевой длины -.