さて、私にとってはいいと思う解決策を見つけました:これは広くテストされたメカニズムを使用してシェル環境を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
を信頼する必要があります。
年...
私の最初の投稿があります...歴史の目的のために、これ以上見ないでください。
唯一の方法は、コマンドにenvironをダンプするように要求しながら、結果コマンドを解析することです。
my @lines=split("\n",`. /home/chronicles/logon.sh;set`);
map { $ENV{$1}=$2 if /^([^ =])=(.*)$/; } @lines;