perl脚本 linux,linux – 通过Perl脚本设置环境变量
您當(dāng)前的腳本甚至不會(huì)更改Perl腳本本身的環(huán)境變量.相反,它調(diào)用shell作為子進(jìn)程; shell進(jìn)程執(zhí)行. /root/.profile,僅在該shell進(jìn)程中更新$LD_LIBRARY_PATH.
您可以通過(guò)更新%ENV來(lái)更改Perl腳本中的環(huán)境變量(更確切地說(shuō),在運(yùn)行Perl腳本的過(guò)程中):
$ENV{LD_LIBRARY_PATH} = '/'; # or some more reasonable value
正如perldoc -v%ENV所說(shuō):
%ENV The hash %ENV contains your current environment. Setting a value in “ENV” changes the environment for any child processes you subsequently “fork()” off.
但那可能仍然不會(huì)做你想要的;它不會(huì)(也不會(huì))影響調(diào)用Perl腳本(您的交互式shell)的進(jìn)程的環(huán)境,只會(huì)影響Perl進(jìn)程本身及其調(diào)用的任何內(nèi)容.
我假設(shè)您要在當(dāng)前的交互式shell進(jìn)程中更新$LD_LIBRARY_PATH.為此,您可以讓Perl腳本打印一個(gè)將更新$LD_LIBRARY_PATH的shell命令.然后,您可以執(zhí)行它,然后評(píng)估其輸出,而不是簡(jiǎn)單地運(yùn)行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
/
$
這假設(shè)您當(dāng)前的shell是bash或類似的東西.
另一種選擇:修改%ENV后,您的Perl腳本可以調(diào)用另一個(gè)命令,甚至是新的交互式shell.新進(jìn)程將從Perl腳本繼承其環(huán)境.但這可能有點(diǎn)麻煩;例如,如果新進(jìn)程是交互式shell,則它不會(huì)從父shell繼承未導(dǎo)出的變量或歷史記錄.
(一個(gè)注意事項(xiàng),與您的問(wèn)題沒有直接關(guān)系:您正在使用/root/.profile這一事實(shí)意味著您正在以root身份執(zhí)行操作(超級(jí)用戶).這可能很危險(xiǎn).使用root帳戶(通過(guò)記錄進(jìn)入它或通過(guò)sudo僅用于實(shí)際需要root權(quán)限的東西.對(duì)于其他任何東西,使用個(gè)人用戶帳戶.
總結(jié)
以上是生活随笔為你收集整理的perl脚本 linux,linux – 通过Perl脚本设置环境变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [vue] vue为什么要求组件模板只能
- 下一篇: linux执行perl脚本,如何从Per