Есть ли способ загрузить профиль внутри Perl? - PullRequest
0 голосов
/ 19 апреля 2010

Есть ли способ загрузить профиль в Perl?

Как в файлах оболочки:

. ~ Пользователь / .profile

Ответы [ 4 ]

6 голосов
/ 20 апреля 2010

Что конкретно вы подразумеваете под "профилем"?

Если вы имеете в виду «получить значения переменных среды оболочки, которые ваша оболочка установила через .profile», то да - вы делаете это через специальный %ENV хеш.

Если вы имеете в виду «читать фактические переменные, заданные в .profile», как это делает сама оболочка, это возможно, но для того, чтобы «сделать это правильно», нужно либо выполнить синтаксический анализ произвольного сценария оболочки и очистить все, что не является назначением переменной среды, ИЛИ выполнить ". ~ / .Profile; env` "` и парсинг вывода.

Если вы имеете в виду «предоставить общую конфигурацию любой программе Perl, которая запускается через отдельный файл конфигурации», вам нужно добавить код в эти программы Perl для чтения этого файла конфигурации (существует несколько модулей CPAN для чтения различных конфигураций файлы).

Если вы имеете в виду «предоставить общую конфигурацию любой программе Perl, которая запускает без какого-либо специального кода в этих программах Perl для чтения отдельного файла конфигурации, что-то вроде любого сценария оболочки, получающего материал из .profile». благодаря оболочке ", тогда asnwer" может быть ". Вы можете использовать переменную окружения PERLOPT для предоставления опций, которые будут загружать специальный модуль (через -I), содержащий конфигурацию, которая устанавливается через его "import ()". Хотя это несколько выполнимо, это похоже на ужасный взлом, который я настоятельно рекомендую не использовать .

3 голосов
/ 20 апреля 2010

Env :: Sourced должен делать то, что вам нужно.

use Env::Sourced qw(~/user/profile);
print $ENV{VARAIBLE};
1 голос
/ 20 апреля 2010

Если у вас есть значения конфигурации bash в (или другой конфигурации, настроенной) сценарием оболочки и вы хотите, чтобы она действовала только на время одного выполнения программы, вы можете использовать подоболочку:

( source ~/my_bash_file.sh; perl my_perl_script.pl )

Вы можете получить доступ к переменным среды оболочки в Perl, используя хэш %ENV (см. Индекс специальных переменных Perl, perldoc perlvar ):

my $user = $ENV{USER};
my $home_dir = $ENV{HOME};

Пример:

my_bash_file.sh:

#!/bin/bash
export HOME="/home/nowhere"

my_perl_script.pl:

#!/usr/bin/perl
print "the value of HOME is $ENV{HOME}\n";

Когда выполняется как perl my_perl_script.pl, my_perl_script.pl печатает:

значение HOME - / home / ether

Когда выполняется как ( source ~/my_bash_file.sh; perl my_perl_script.pl ), вывод:

значение HOME - / home / нигде

0 голосов
/ 20 апреля 2010
$u=`echo -n ~user`;
open F, "<$u/.profile" || die;
while(<F>)
{print}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...