如何导入环境设置成我的Perl程序?(How do I import environment set

2019-08-21 01:38发布

我有一个脚本,其内容只是出口的变量在Linux操作系统。

export LD_LIBRARY_PATH=....

我想在我的Perl脚本所以不管是谁运行我的Perl脚本都会有自己运行此脚本LD_LIBRARY_PATH集。 我可以做这在我的Perl脚本的开头:

#!/usr/bin/perl -w

system(". /myfolder1/myfolder2/myScript.sh");

Answer 1:

#!/bin/sh
. /myfolder1/myfolder2/myScript.sh
exec perl -wxS "$0" "$@"
#!/usr/bin/perl -w
# .. the rest of your script as normal

当你运行它,它会首先被执行/bin/sh ,这是能够加载myScript.sh到当地的环境。 sh然后exec小号Perl,它是说从下面的行继续。



Answer 2:

这将无法正常工作。 换个环境你的Perl脚本中(和更改将在从您的Perl脚本中运行命令传递环境),改变%ENV变量。

$ENV{"LD_LIBRARY_PATH"} = ... ;


Answer 3:

这将无法正常工作。 有没有办法为一个子shell来操纵父进程的环境。

但是你可以使你的脚本回声字符串要设置为LD_LIBRARY_PATH,然后从你的Perl脚本中,你可以做这样的事情:

$ENV{LD_LIBRARY_PATH} = `path/to/your/script.sh`;

当然,有些错误检查也可能是一个好主意。



Answer 4:

第一个孩子做你的环境的变化不能影响父。 这意味着运行脚本不会影响perl的。 此外Perl将不会影响从它被称为壳。 你可以通过改变编辑里面的Perl环境特殊变量 %ENV 。 如果有某种不可再现的计算在该脚本完成的,也许脚本应该只是echo设置和Perl可以挑选了在STDOUT ,并使用它。

我在perl脚本{更动目录,更改我的使用环境}。 为何这些改变,当我退出脚本消失了? 如何让我的变化可见?

UNIX在严格的意义上说,它不能做-脚本执行从它开始从外壳一个不同的过程。 更改的过程没有反映在其母公司,只有在更改后创建了自己的孩子。



Answer 5:

我在几年前也有类似的问题,并掀起了一个小模块, 信封::来源 ,是应该做的伎俩。

 use Env::Sourced qw(/myfolder1/myfolder2/myScript.sh);

...



Answer 6:

(不是直接在Perl的进行更改其他的另一个选项%ENV )是让你想一个Perl模块的变化,让你可以说:

use MyEnvironment;

并将其修改你的环境在所有的脚本。 这将使它简单做,这样就不需要编辑每个脚本在事后的变化。

本身是简单的模块,像这样:

package MyEnvironment;

$ENV{LD_LIBRARY_PATH} .= ":/some/path/you/want/appended";
# Any other changes you want here.

1;


Answer 7:

这是行不通的。 一个(不愉快)的变通办法是用一个shell脚本,首先执行的脚本,然后执行Perl可执行文件,以取代在/ usr / bin中/ perl的。



Answer 8:

这不能在你试图做到这一点的方式来完成。

这或者需要一个包装shell脚本,设置LD_LIBRARY_PATH ,然后调用你的Perl脚本,或执行脚本的任何用户需要有LD_LIBRARY_PATH摆在首位正确设置。

如果做的是后者,那么这可以通过全球管理编辑/etc/profile ,并/etc/cshrc (使ksh,SH,庆典,CSH和tcsh)炮弹。 然后,您可以测试的价值LD_LIBRARY_PATH在你的脚本,如果没有设置/设置不正确,然后打印一个友好的信息给用户。 或者个人用户可以在自己的本地设置此.profile / .cshrc的文件。

注意:你没有给对环境或useres可能运行此的任何信息,因此也有用户可设置的可能性LD_LIBRARY_PATH他们所需要的东西。 如果你做检查LD_LIBRARY_PATH在脚本中是一个“好”的值,那么请记住,可能已经指定了多个路径,所以你需要正确地解析此环境变量。



Answer 9:

如果你能找到你的Perl脚本正确的地方,这个工作在我的例子:

$ENV{"LD_LIBRARY_PATH"} = "/oracle/product/10g/lib";

并没有要求我打电话给另一个脚本设置的环境变量。



Answer 10:

Env::Modify模块解决了这个问题,至少对POSIX-Y平台:

use Env::Modify 'source';
source("/myfolder1/myfolder2/myScript.sh");
... environment settings from myScript.sh are now available to Perl ...


文章来源: How do I import environment settings into my Perl program?