perl脚本 linux,linux – 通过Perl脚本设置环境变量

旧城等待, 2023-01-19 15:56 491阅读 0赞

您当前的脚本甚至不会更改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权限的东西.对于其他任何东西,使用个人用户帐户.

发表评论

表情:
评论列表 (有 0 条评论,491人围观)

还没有评论,来说两句吧...

相关阅读

    相关 34. Perl 脚本实战-rscpup

    rscpdown 用于免交互从远程服务器上下载文件, 不能下载多个文件。 命令使用说明: 命令依赖expect 环境 命令携带用户名和密码, 无须交互 文件