2013-10-13 99 views
2

我不確定導入是否適合使用。我是Perl和Bash的初學者。我已上猛砸一個變量,所以當我這樣做:將環境變量導入到Perl

echo $PRDIR 

它打印一個字符串(這是一個目錄名)

我想導入該字符串的Perl,我不知道如何要做到這一點。我已經試過:

$varex = system("$PRDIR"); 
print "$varex"; 

而且還

$varex = system("echo $PRDIR"); 
print "$varex"; 

,但不工作(我的理解是最後一個,它打印出「0」,因爲這是回聲的返回值)。我也嘗試將stdout重定向到一個變量,但我不能。

回答

8

如果你想擊將變量導出到環境中,因此對程序訪問,您可以使用export內置:

export PRDIR 

裏面的Perl,你會使用%ENV哈希然後訪問它:

在外殼:

my $varex = $ENV{"PRDIR"}; 
print "\$varex is: $varex\n"; 
2

另一種解決方案,以直接在Perl使用該變量

$ export PRDIR=foobar 

在Perl中:

#!/usr/bin/perl 

use Modern::Perl; 

use Env qw/PRDIR/; 

say $PRDIR; 
1

我想你需要的東西是這樣的:

use Cwd 'abs_path'; 
use File::Basename; 
my $self = abs_path($0); 
my $bindir = dirname(abs_path($0)); 
unless ($ENV{APP_ENV}) { 
    warn "No APP_ENV, will try to get from bin/env.sh"; 
    exec("source $bindir/env.sh && /usr/bin/perl $self") || die "$!"; 
} 

我env.sh與以下內容我的bin文件夾:

export APP_ENV=development 

這種方法背後的想法是,如果我設置了我的ENV值,我不需要打擾在運行我的Perl代碼之前,或者忘記去做。我只需要運行我的Perl程序,它會爲自己準備環境。