Ответ, как правило, "нет", просто потому, что -по общему правилу -в файле нет фактического символа, который окончательно отмечает конец файла.
Возможно, вам стоит попробовать другой подход, например один из предложенных здесь:https://stackoverflow.com/questions/10984432/how-to-read-the-file-content-into-a-variable-in-one-go. Использование:
IFS="" contents=$(
особенно элегантен; это заставляет Bash считывать содержимое file
в переменную contents
, за исключением байтов NULL -, которые переменные Bash -не могут хранить (из-за внутреннего использования стиля C -., NULL -строки с завершением байта ). IFS=""
устанавливает внутренний разделитель полей пустым, чтобы отключить разделение слов (и, следовательно, избежать удаления новых строк ).
Примечание :Так как (из-за отсутствия очков репутации )я не могу комментировать ответ, предполагающий использование read
с опцией -N
, отмечу здесь, что этот ответ -по определению -не гарантирует работу в том виде, в каком он есть, поскольку размер файла заранее неизвестен.
Используйте мой ответ на ваш не -тот -другой вопрос по SU , чтобы создать три find
команды, которые найдут нужные вам файлы. Тогда:
{ find … -print0 ; find … -print0 ; find … -print0 ; } | xargs -r -0 tail -F
Примечания:
-F
из-за этого:Как сделать tail -f
ротацию файлов журналов?find
команды выполняются только один раз. Если появится новый файл, имя которого было бы найдено, но в то время не существовало, то tail
проигнорирует его. Другими словами, :, когда tail
запускается, все его аргументы фиксируются, файл с -по -не входит в их число. find
s превышают предел , тогда xarg
будет выполняться более одногоtail
(по умолчанию не параллельно, хотя ). Конечно, вы не хотите этого. Надеемся, что ваши find
найдут разумное количество файлов, и ограничение не будет превышено. find -print0
и xargs -r -0
не переносимы. Вы отметили ubuntu ; в Ubuntu они будут работать. Конец всех нужных файлов... вывод каждого хвоста в файл... хвост нового файла.
хвост -f /var/log/large.log > ~/full.log && tail -f /var/log/medium.log > ~/full.log && tail -] f ~/full.log
вы можете запустить его как одну команду, но поначалу это выглядит немного странно... но вы можете запустить его в другом tty, если хотите, и просто закрепить полный журнал там, где вы хотите, чтобы он выглядел хорошо.