我正嘗試使用perl-DBD-Oracle連接到Oracle數據庫。我需要設置以下環境變量:Perl:爲什麼我的環境變量沒有被設置?
export LD_LIBRARY_PATH=/home/x/lib/ora10gclient
export TNS_ADMIN=/home/x/lib/ora10gclient
export PATH=/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin
export ORACLE_HOME=/home/x/lib/ora10gclient
此腳本由無頭用戶運行,我已經把那些線.bash_profile文件中對於無頭的用戶。
問題是,無頭用戶ssh進入運行此腳本的機器,並且bash配置文件未找到。所以我想,我只想設置在腳本的BEGIN塊的環境變量,像這樣:
BEGIN {
$ENV{'LD_LIBRARY_PATH'} = '/home/x/lib/ora10gclient';
$ENV{'TNS_ADMIN'} = '/home/x/lib/ora10gclient';
$ENV{'PATH'} = '/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin';
$ENV{'ORACLE_HOME'} = '/home/x/lib/ora10gclient';
}
然而,腳本失敗,聲稱無法找到Oracle.pm,東西,它不這樣做的時候那些環境變量被設置。
我已經在整個腳本中散佈了print語句來確認它確實設置了環境變量。甚至在嘗試創建數據庫句柄(這是腳本失敗的位置)並確認它們仍設置爲正確的值之前,甚至會將環境變量打印出來。
我沒有產生任何子進程。以下是我的腳本的簡化版本,它以相同的方式失敗。
#!/usr/local/bin/perl
use warnings;
use strict;
BEGIN {
$ENV{'LD_LIBRARY_PATH'} = '/home/x/lib/ora10gclient';
$ENV{'TNS_ADMIN'} = '/home/x/lib/ora10gclient';
$ENV{'PATH'} = '/home/x/lib/ora10gclient:/usr/kerberos/bin:/home/x/bin:/home/x/bin64:/usr/local/sbin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin';
$ENV{'ORACLE_HOME'} = '/home/x/lib/ora10gclient';
}
use DBI;
testConnect();
sub testConnect {
my $orclPort = 1521;
my $orclHost = '<oraclehost>';
my $orclUser = '<user>';
my $srvName = '<servicename>';
my $db = "DBI:Oracle:service_name=$srvName;host=$orclHost;port=$orclPort";
my $orclDBHndl = DBI->connect($db, $orclUser, $orclUser) or die "could not connect: $DBI::errstr\n";
}
任何想法可能是什麼問題?
你的PERL5LIB是否也適用於任何設備? – vmpstr 2012-03-13 15:44:10