免费注册 查看新帖 |

Chinaunix

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

[请教]怎么样让perl脚本执行后保留里面设置的环境变量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-13 20:57 |只看该作者 |倒序浏览
想要设置一些bash的环境变量,有一个设置变量的perl脚本setup,然后在shell里面执行了它:
#eval `setup  -sh`
但是这个perl执行完后,shell里面的变量设置又恢复原状,怎么设置才行?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-11-13 21:19 |只看该作者
console里面怎么设置,程序里就怎么写

论坛徽章:
0
3 [报告]
发表于 2005-11-13 22:25 |只看该作者
原帖由 Chidra2020 于 2005-11-13 20:57 发表
想要设置一些bash的环境变量,有一个设置变量的perl脚本setup,然后在shell里面执行了它:
#eval `setup  -sh`
但是这个perl执行完后,shell里面的变量设置又恢复原状,怎么设置才行?
谢谢!



eval调用不是在当前进程里,你的执行方法当然不对了。
直接在当前shell里执行它嘛。

论坛徽章:
0
4 [报告]
发表于 2005-11-13 23:17 |只看该作者
原帖由 兰花仙子 于 2005-11-13 22:25 发表



eval调用不是在当前进程里,你的执行方法当然不对了。
直接在当前shell里执行它嘛。


还是不行,试过了, 我直接perl setup , 但使用$env 命令输出的环境变量和原来的执行前的一模一样,
剪了一部分setup执行以后perl脚本输出的代码, 下面
  1. export PUREHOME
  2. PUREHOME='/usr/local/pure';
  3. export PURE
  4. PURE='/usr/local/pure/purify';
  5. export VISUAL_TCL
复制代码


但执行完毕, $env这里面的变量一个都没有.

论坛徽章:
0
5 [报告]
发表于 2005-11-13 23:21 |只看该作者
原帖由 Chidra2020 于 2005-11-13 23:17 发表


还是不行,试过了, 我直接perl setup , 但使用$env 命令输出的环境变量和原来的执行前的一模一样,
剪了一部分setup执行以后perl脚本输出的代码, 下面
[code]export PUREHOME
PUREHOME='/usr/local/pure';
...

export PUREHOME
PUREHOME='/usr/local/pure';
export PURE
PURE='/usr/local/pure/purify';
export VISUAL_TCL


如果你是在perl脚本里用system函数来export出这些env的话,还是没用的呀。
system()本质上就是fork了子进程的。

论坛徽章:
0
6 [报告]
发表于 2005-11-13 23:57 |只看该作者
原帖由 兰花仙子 于 2005-11-13 23:21 发表

export PUREHOME
PUREHOME='/usr/local/pure';
export PURE
PURE='/usr/local/pure/purify';
export VISUAL_TCL


如果你是在perl脚本里用system函数来export出这些env的话,还是没用的呀。
system()本 ...

刚刚看了shell的, 确实是执行一个命令shell就会产生一个子进程,所以推出后设置还是无效,
看到source和exec命令可以保留子进程的设置,  但我的脚本执行要有一个option, 就是
$./setup -sh
但这个用source命令$source ./setup -sh就有错误......,没加就没有,加了option就有错误了
不知道source怎么执行带option的脚本~?

论坛徽章:
0
7 [报告]
发表于 2005-11-14 00:11 |只看该作者
原帖由 Chidra2020 于 2005-11-13 23:57 发表

刚刚看了shell的, 确实是执行一个命令shell就会产生一个子进程,所以推出后设置还是无效,
看到source和exec命令可以保留子进程的设置,  但我的脚本执行要有一个option, 就是
$./setup -sh
但这个用source命令 ...


exec返回后,很多事就不是你想象的那样了。
source也不能实现你的目的吧?
如果要用当前shell环境的话,你就直接在shell脚本里export出这些env嘛,何必搞得那么麻烦。
如果非得修改perl脚本的运行env,那就直接修改perl的%ENV变量好了。

论坛徽章:
0
8 [报告]
发表于 2005-11-14 08:33 |只看该作者
原帖由 Chidra2020 于 2005-11-13 20:57 发表
想要设置一些bash的环境变量,有一个设置变量的perl脚本setup,然后在shell里面执行了它:
#eval `setup  -sh`
但是这个perl执行完后,shell里面的变量设置又恢复原状,怎么设置才行?
谢谢!


很明显,这个是和Shell的处理机制有关系

因为在Shell中启动的脚本都会以一个独立的子进程运行,你所修改的环境变量只是在子进程中有效!

很简单的一个实验!
  1. #!/bin/sh
  2. cd /home
  3. echo $PWD
复制代码


但是等你退出之后你发现自己还在原先的目录,就没有cd过去。就是这个道理!

论坛徽章:
0
9 [报告]
发表于 2005-11-14 08:39 |只看该作者
原帖由 Chidra2020 于 2005-11-13 23:57 发表

刚刚看了shell的, 确实是执行一个命令shell就会产生一个子进程,所以推出后设置还是无效,
看到source和exec命令可以保留子进程的设置,  但我的脚本执行要有一个option, 就是
$./setup -sh
但这个用source命令 ...


source filename [arguments]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP