Задать вопрос
JohnnyGat
@JohnnyGat
Стараюсь писать код, понятный человеку.

Возможно ли динамически сформировать файл конфигурации, если требует указать к нему путь?

Вопрос не конкретно про установку антивируса Касперского в Линуксе, он приведен как пример.

Вызов следующей команды запустит первоначальную настройку Kaspersky Endpoint Security в автоматическом режиме и установит значения параметров, указанные в конфигурационном файле первоначальной настройки.
kesl-setup.pl --autoinstall=<полный путь к исходному конфигурационному файлу>

Я хочу в bash-скрипте динамически формировать содержимое такого файла конфигурации. И вот в этот момент и возникает мой вопрос. Возможно ли как-то перенаправить динамически сформированное содержимое вместо указания пути на файл? Если нет, то куда правильнее в линуксе сохранить такой файл (возможно в директорию "tmp", но не возникнет ли ситуация что ОС именно сейчас решит почистить "tmp")?
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 3
@vitaly_il1
DevOps Consulting
Возможно ли как-то перенаправить динамически сформированное содержимое вместо указания пути на файл?

Зависит от программы. Настояющие юниксовские програамы умеют получать данные из stdin. Например

echo "hello world" | gzip >/tmp/hello.gz

Если нет, то можно сохранить в /tmp, удаляются только старые файлы.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
kesl-setup.pl --autoinstall=<полный путь к исходному конфигурационному файлу>

В данном случае у вас не линукс устанавлвиает что-то с конфигурационным файлом а конкретно перловый скрипт kesl-setup.pl использует опцию --autoinstall и ожидает что параметром будет имя файла. Поэтому именно в этом случае понятно, что подставить что-то другое вместо имени файла нельзя, либо посмотреть и поправить перл скрипт.

Тоже касается и всех других программ - если они ждут имя файла, значит им нужно предоставить имя файла, если им можно скормить просто кусок текста, можно перенаправить кусок текста сгенерированного динамически.

Но в вашем случае - проще генерировать файл в /tmp

(возможно в директорию "tmp", но не возникнет ли ситуация что ОС именно сейчас решит почистить "tmp")?

ОС вообще не чистит /tmp - это задача вашего скрипта чистить /tmp
В общем случае, /tmp в линуксах монтируется как рамдиск в памяти и "автоматом" чистится при рестарте ОС.
Так что если ваш скрипт за собой не будет удалять сгенерированные файлы, то в /tmp можно смело хранить файлы до ребута.
Ответ написан
shurshur
@shurshur
Сисадмин, просто сисадмин...
Можно сделать как-то так:

echo some_file_content | command /dev/stdin

Тогда команда получит в качестве имени файла /dev/stdin, который означает стандартный ввод и будет при чтении возвращать строку some_file_content. Но надо учитывать, что seek по такому файлу невозможен, поэтому если программа не просто читает файл построчно, а пытается перемещаться по нему, то это не сработает.

Если не хочется занимать stdin или надо передать так несколько псевдофайлов, можно сделать так:

command <(echo some_file_conten)

Фактически command получит в качестве аргумента что-то типа /dev/fd/63. Можно убедиться, сделав

ls -l <(echo hello)

Но в целом не стоит слишком бояться создавать временные файлы. Это быстро, ведь если генерировать его непосредственно перед запуском, то данные сразу будут в дисковом кэше и прочитаются программой моментально.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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