好吧,我找到了一个对我来说听起来不错的解决方案:这看起来很健壮,因为它使用经过广泛测试的机制将 shell 环境绑定到 perl(运行 perl)和健壮的库以perl 变量语法导出它们以进行重新注入在根 perl 会话中。
该行export COLOR tty
对于要求我的 bash 导出更新的变量很有用......这似乎工作正常。
#!/usr/bin/perl -w
my $perldumpenv='perl -MData::Dumper -e '."'".
'\$Data::Dumper::Terse=1;print Dumper(\%ENV);'."'";
eval '%ENV=('.$1.')' if `bash -c "
. ./home/chronicles/logon.sh;
export COLOR tty ID;
$perldumpenv"`
=~ /^\s*\{(.*)\}\s*$/mxs;
# map { printf "%-30s::%s\n",$_,$ENV{$_} } keys %ENV;
printf "%s\n", $ENV{'ID'};
无论如何,如果您无权访问logon.sh
,则必须在运行此类解决方案之前信任它。
老的...
这是我的第一篇文章......出于历史目的,不要再看了。
唯一的方法是解析结果命令,同时要求命令转储环境:
my @lines=split("\n",`. /home/chronicles/logon.sh;set`);
map { $ENV{$1}=$2 if /^([^ =])=(.*)$/; } @lines;