perl脚本 linux,linux – 通过Perl脚本设置环境变量
您当前的脚本甚至不会更改Perl脚本本身的环境变量.相反,它调用shell作为子进程; shell进程执行. /root/.profile,仅在该shell进程中更新$LD_LIBRARY_PATH.
您可以通过更新%ENV来更改Perl脚本中的环境变量(更确切地说,在运行Perl脚本的过程中):
$ENV{LD_LIBRARY_PATH} = ‘/‘; # or some more reasonable value
正如perldoc -v%ENV所说:
%ENV The hash %ENV contains your current environment. Setting a value in “ENV” changes the environment for any child processes you subsequently “fork()” off.
但那可能仍然不会做你想要的;它不会(也不会)影响调用Perl脚本(您的交互式shell)的进程的环境,只会影响Perl进程本身及其调用的任何内容.
我假设您要在当前的交互式shell进程中更新$LD_LIBRARY_PATH.为此,您可以让Perl脚本打印一个将更新$LD_LIBRARY_PATH的shell命令.然后,您可以执行它,然后评估其输出,而不是简单地运行Perl脚本.例如:
$cat env.pl
#!/usr/bin/perl
use strict;
use warnings;
print “export LD_LIBRARY_PATH=/\n”;
$./env.pl # just prints the command without executing it
export LD_LIBRARY_PATH=/
$eval $(./env.pl) # executes the command in the current shell
$echo $LD_LIBRARY_PATH
/
$
这假设您当前的shell是bash或类似的东西.
另一种选择:修改%ENV后,您的Perl脚本可以调用另一个命令,甚至是新的交互式shell.新进程将从Perl脚本继承其环境.但这可能有点麻烦;例如,如果新进程是交互式shell,则它不会从父shell继承未导出的变量或历史记录.
(一个注意事项,与您的问题没有直接关系:您正在使用/root/.profile这一事实意味着您正在以root身份执行操作(超级用户).这可能很危险.使用root帐户(通过记录进入它或通过sudo仅用于实际需要root权限的东西.对于其他任何东西,使用个人用户帐户.
还没有评论,来说两句吧...