免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 16093 | 回复: 9
打印 上一主题 下一主题

如何在perl里设置系统的环境变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-10 17:31 |只看该作者 |倒序浏览
小弟现在遇到了如下的问题:
1. 移动一个perl程序到其他目录,就无法运行,原因是程序里用了相对路径,找不到其他的相关文件;
2. 在perl程序里设置全局变量(包括环境变量),希望能够export,被其他的程序来使用。

这两个问题可以归结于一个问题:
如何在perl里设置系统的环境变量,并能够被export给其他程序来使用?

向Perl大侠们指教, 谢谢

论坛徽章:
0
2 [报告]
发表于 2008-06-10 17:37 |只看该作者
最简单的就是使用system命令

论坛徽章:
0
3 [报告]
发表于 2008-06-10 17:45 |只看该作者

回复 #2 converse 的帖子

system能够设这全局的环境变量吗?

刚才搜了一下,flw大侠好像说用%ENV, 我变量一个小程序叫getenv.pl,如下:

#! /usr/bin/perl -w

while ((my $key, my $value) = each %ENV) {
        print "$key => $value\n";
}
$ENV{'PATH'} = "/home/qq/2008ENV{'PATH'}";

运行:
/getenv.pl
echo $PATH | grep 2008

发现$PATH的值并不包括"/home/qq/2008",这是为什么呢?

[ 本帖最后由 afeiguo 于 2008-6-10 18:36 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-06-10 19:01 |只看该作者

回复 #3 afeiguo 的帖子

执行程序是开了一个子进程
子进程里面的变量怎么可能影响到父进程里面的变量呢?

再深入一点
为什么unix的cd命令是一个“内置”的命令,而不是一个外部的命令?(你去find一下,是没有cd这个命令的)
那是因为如果把cd做成外部命令,则你 cd xx
运行cd的时候开了一个子shell,cd之后的结果不会返回到父shell,所以你cd xx执行完了以后,父shell的路径是不会发生变化的
所以cd是要做成内置的命令

论坛徽章:
0
5 [报告]
发表于 2008-06-10 19:20 |只看该作者

回复 #4 churchmice 的帖子

你的观点,我很同意。
实际上,就算通过/etc/profile或者/etc/bashrc 修改,也需要重启才能生效(我通常这样做,不知其他的可能性

谢谢!

好像谁这样说过:如果提出过分的要求,那肯定是你的设计有问题

论坛徽章:
0
6 [报告]
发表于 2008-06-10 19:25 |只看该作者

回复 #5 afeiguo 的帖子

我一般就source一下
如果不行的话就log out and login

论坛徽章:
0
7 [报告]
发表于 2008-06-10 19:26 |只看该作者
cd是shell的built-in,跟你说的没关系

论坛徽章:
0
8 [报告]
发表于 2008-06-11 11:19 |只看该作者
%ENV是正解!其余的方法都是非正解。

论坛徽章:
0
9 [报告]
发表于 2008-06-11 12:20 |只看该作者
system命令错了吗?

论坛徽章:
0
10 [报告]
发表于 2008-06-11 16:45 |只看该作者
4楼正解
在一个perl程序中,由于fork出子进程的关系
system和%ENV都无法改变系统的PATH
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP