我不确定导入是否是正确的用词。我是Perl和Bash的初学者。我在Bash上设置了一个变量,所以当我这样做时:
echo $PRDIR
它打印一个字符串(它是一个目录名)
我想将该字符串导入Perl,我不知道该怎么做。我试过了:
$varex = system("$PRDIR");
print "$varex";
还
$varex = system("echo $PRDIR");
print "$varex";
但是这不起作用(我理解最后一个,它打印“0”因为那是echo的返回值)。我也尝试将stdout
重定向到变量,但我不能。
答案 0 :(得分:8)
如果您希望Bash将变量导出到环境中以便程序可以访问它,您可以使用export
内置:
export PRDIR
在Perl中,您可以使用%ENV
哈希访问它:
my $varex = $ENV{"PRDIR"};
print "\$varex is: $varex\n";
答案 1 :(得分:2)
在perl中直接使用变量的另一种解决方案:
在shell中:
$ export PRDIR=foobar
在perl:
#!/usr/bin/perl
use Modern::Perl;
use Env qw/PRDIR/;
say $PRDIR;
答案 2 :(得分: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 "$!";
}
我的bin文件夹中有env.sh,内容如下:
export APP_ENV=development
这种方法背后的想法是,如果我在运行Perl代码之前设置我的ENV变量或忘记这样做,我就不需要打扰了。我只需要运行我的Perl程序,它就会为自己准备环境。