Могу ли я получить tail -f
вывод с http://example.com
?
Я хочу контролировать внешний файл JSON.
Нет. Из справочной страницы (1):
With --follow (-f), tail defaults to following the file descriptor,
which means that even if a tail’ed file is renamed, tail will continue
to track its end. This default behavior is not desirable when you
really want to track the actual name of the file, not the file descrip-
tor (e.g., log rotation). Use --follow=name in that case. That causes
tail to track the named file in a way that accommodates renaming,
removal and creation.
Это означает, что команда tail должна будет следовать за файловым дескриптором, чего не происходит, когда вы отправляете http-запрос. Ваша файловая система не знает, что удаленный (в том смысле, на который вы ссылаетесь) файл изменился. Чтобы заставить что-то подобное работать, вам понадобится утилита / скрипт, который опрашивает сервер через определенный интервал или использует что-то вроде веб-сокетов (если сервер это поддерживает).
Один из способов сделать это - запустить wget
на целевом URL в цикле и хвосте, которые:
$ while :; do
wget -qO - http://example.com >> /tmp/foo; sleep 1;
done
Затем из другого терминала запустить
$ tail -f /tmp/foo
Чтобы использовать tail -f
для интернет-файла, вам нужно, чтобы этот файл был локально читаемым и опрашиваемым. Один из способов сделать это - использовать HTTPFS, однако это не часто используемый или зрелый программный продукт.