perl script中如何获得和设置环境变量CCM_ADDR
作者 howardling   查看 3316   发表时间 2007/5/24 17:45  【论坛浏览】
hello,all:zlihshpm
zlihshpm
question1:zlihshpm
zlihshpm
我的环境是active perl 5.8.8 build 820 ,winxp sp2,zlihshpm
我用$CCM_ADDR=system("ccm start......."),能获得ADDR的正确地址输出,zlihshpm
但我用print $CCM_ADDR时,打印结果是0,zlihshpm
为什么结果会不一样呢?zlihshpm
zlihshpm
question2:zlihshpm
zlihshpm
设置环境变量时我用语句:zlihshpm
$ENV{'CCM_ADDR'}=$CCM_ADDR,zlihshpm
该句有错吗?还需要use某个包吗?zlihshpm
zlihshpm
有经验的朋友进来指点一二啊!Many Thanks.zlihshpm
zlihshpm
:4::

序号 评论者 共有评论 11   【论坛浏览】  【发表评论】 评论时间
1 hasjing 回复 #1 howardling 的帖子
$CCM_ADDR=`ccm start.......`;
2007/5/25 00:22
2 howardling

  引用:
原帖由 hasjing 于 2007-5-25 00:22 发表
$CCM_ADDR=`ccm start.......`;

测试环境
active perl 5.8.8 build 820 ,winxp sp2 ,简体中文

结果用语句$CCM_ADDR=`ccm start.......`不行,直接返回的就是ccm start的命令行语句,并不返回session 地址值

我不知道我哪里没设置好,执行pl的机器我已经加入bin目录到环境变量了,这个应该不是问题

如果用system("ccm start......."),能获得ADDR的正确地址输出,但就是不能赋值给环境变量$CCM_ADDR,困惑ing!

Thanks hasjing!

:4::

[ 本帖最后由 howardling 于 2007-5-27 02:08 编辑 ]
2007/5/25 11:36
3 i子休 Q1
system返回的是ccm start的退出状态,0代表成功
如果需要返回ccm start的输出信息,可以用qx或者``

Q2
没错
2007/5/25 13:36
4 hasjing 回复 #3 howardling 的帖子
用 `ccm start ... ` 可以得到 ccm start 命令通过 stdout 返回的输出信息,
如果要获得环境变量 CCM_ADDR 的值,可用用 $ENV("CCM_ADDR") 获得,
设置CCM_ADDR 的值可以用跟你的 Q2 一样!
2007/5/25 15:24
5 howardling 在子休的提示下,我用qx(ccm start........)获得了CCM_ADDR的值,
现在奇怪的是为什么在win平台下'ccm start'无法执行呢?
用符号' '包括的内容在win下只能是普通字符串吧。
比如说,print 'ccm start...........',是无法执行里面的命令的,会直接打印出单引号里面的内容。

非常感谢子休和hasjing的跟帖!
2007/5/27 02:11
6 howardling 应该说,这不是环境变量的问题了

而是如何获得session 地址的问题了!
2007/5/27 02:18
7 hasjing 回复 #7 howardling 的帖子
我想确认一下,你是否是希望在Perl里面Start一个CM的Session,然后
在执行一些自动化的事情?
如果是这样,需要考虑如下问题:
通过Perl system 或者 `` 执行的操作系统命令,
会首先加载一个 sh 进程(在Windows下是cmd)然后通过这个进程执行你的命令,
所以当 system里面的命令执行完后,sh 进程会被释放,sh 进程加载的session可能也被释放了;

所以建议你能先 用 命令行下面 start 起来一个 ccm 的session后,再执行perl的批处理;

关于如何能够再Perl里面执行加载 ccm start,等我有时间时,会试验研究一下;
2007/5/27 17:46
8 howardling 回复 #8 hasjing 的帖子
是的,
希望在Perl里面Start一个CM的Session,然后在执行一些自动化的事情;
window下,我的测试结果是:执行system(ccm stop)之前是不会释放cm session的.
2007/5/27 23:25
9 i子休

  引用:
原帖由 howardling 于 2007-5-27 02:11 发表
现在奇怪的是为什么在win平台下'ccm start'无法执行呢?
用符号' '包括的内容在win下只能是普通字符串吧。
比如说,print 'ccm start...........',是无法执行里面的命令的,会直接打印出单引号里面的内容。

执行系统命令的是反引号:`command`

构造字符串的是单引号:'string'
2007/5/28 09:44
10 i子休

  引用:
原帖由 hasjing 于 2007-5-27 17:46 发表
通过Perl system 或者 `` 执行的操作系统命令,
会首先加载一个 sh 进程(在Windows下是cmd)然后通过这个进程执行你的命令

如果传给system、exec多个参数,例如system "ccm", "start",是不会有新的shell产生的

在只有一个参数的情况下,是否会fork出一个shell来执行命令,取决于命令字符串中是否有shell的元字符

比如楼主的system("ccm start"),也是不会fork出一个shell的,所以在调用ccm stop之前,session会一直有效
2007/5/28 10:25
 共有评论数 11  每页显示 10
页码 1/2  |<  <<   1 2   >>  >|