Jam*_*ren 1 variables environment perl dbi dbd
我试图在程序的最开始在Perl中设置一些环境变量,但我一直收到错误,除非我在调用我的Perl脚本的Bash脚本中设置它们.
#!/usr/bin/perl -w
$ENV{'ORACLE_HOME'}='path';
$ENV{'LD_LIBRARY_PATH'}='path';
Run Code Online (Sandbox Code Playgroud)
这不起作用,但我的shell脚本确实:
#!/bin/bash
export ORACLE_HOME=path
export LD_LIBRARY_PATH=path
./perlscript.pl
Run Code Online (Sandbox Code Playgroud)
我正在设置这些路径以使我的DBI模块工作.理想情况下,我想在Perl脚本中设置路径而不使用Bash脚本.
Install_driver(Oracle)失败:无法加载/ some/path /用于模块DBD:Oracle:libclntsh.so.11.1:无法打开共享对象文件:/some/path/DynaLoader.pm第230行没有这样的文件或目录
use DBI;
my $dbh = DBI->connect("DBI:Oracle:host=something;port=something;sid=something");
my $sth = $dbh->perepare($query);
$sth->execute();
$sth->finish();
Run Code Online (Sandbox Code Playgroud)
IIRC,这是因为C库使其拥有环境的副本和/或因为LD_LIBRARY_PATH在加载可执行文件时使用它.解决方法:
#!/usr/bin/perl -w
if (!$ENV{ORACLE_HOME}) {
$ENV{ORACLE_HOME} = 'path';
$ENV{LD_LIBRARY_PATH} = 'path';
exec($^X, '--', $0, @ARGV);
}
...
Run Code Online (Sandbox Code Playgroud)
如果我错了,请先尝试以下方法.它确保在加载使用它们的模块之前设置环境变量.
#!/usr/bin/perl -w
BEGIN {
$ENV{ORACLE_HOME} = 'path';
$ENV{LD_LIBRARY_PATH} = 'path';
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5488 次 |
| 最近记录: |