как прочитать .env ?

Oct 07, 2018 09:27


формат файла .env обычный, например:

DEPLOY_DB="test1"

DEPLOY_USER="111"

DEPLOY_PASSWORD="111"

есть какойто модуль чтоб загрузить файл и переменные получить в скрипте perl в $ENV['DEPLOY_DB'] и т.д.

или это можно сделать средствами perl?

Leave a comment

Comments 16

01petr October 7 2018, 07:42:48 UTC
так можно:

my %config = iniread ('/path/to/ini/file.ini');

sub iniread
{
my $line,$name,$val,%config,$sectionname;
if (open($HANDLE, "<$_[0]"))
{
$sectionname = '';
while (<$HANDLE ( ... )

Reply

besm6 October 7 2018, 10:19:17 UTC
Что-то я не вижу тут снятия кавычек. Не говоря уже о прочем sh-unescape. Что неудивительно, ибо синтаксис .ini изрядно отличается от синтаксиса .env.

Reply

01petr October 7 2018, 10:48:24 UTC
кавычки можно вырезать. есть сложности?

Reply

besm6 October 7 2018, 10:53:36 UTC
Можно. Просто приведенный код этого не делает, т.е. поставленную задачу не решает, а многое не нужное для ее решения делает.

Reply


ext_2283889 October 7 2018, 09:17:43 UTC
Config::Tiny

Reply


ignik October 7 2018, 12:23:37 UTC
Мочить, солить по вкусу: # my %c = readconf "file.conf"; # key=value
sub readconf ( $ ) { open F, $_[0] or printf "Can't open $_[0] $!" and return;
chomp (my %C = map { /^(.*)="(.*)"$/ ? ($1,$2) : () } ); close F; return %C; }

Reply


b00_dc October 7 2018, 15:57:36 UTC
В хэш спит через равно, с удалением кавычек и т.д.

Reply


ext_4838535 October 9 2018, 17:12:49 UTC
В общем случае задача не имеет решения, поскольку и в качестве ключей, и в значениях разрешена интерпретация синтаксиса шелла. Никаким парсером уровня перла (в разумное количество строк кода) вы не получите правильный результат например для такой строчки:

destroy_result="`rm -rf /* && echo ok`"

Reply

ext_4838535 October 9 2018, 17:23:23 UTC
Надёжно, но медленно и не безопасно: зовём шелл с пустым окружением, просим подгрузить .env файл и для обновленного окружения сделать вывод в формат, который легко будет отпарсить перлом.

Быстро, не надёжно и потенциально небезопасно: вот эти игры с регэкспами, как тут выше советуют. Но если возможные разрешенные конструкции конфигп ограничены до условных ['"\\], то без проблем.

Reply


Leave a comment

Up