我的Perl脚本是否从“其他地方”获取环境变量?

时间:2010-05-28 16:59:31

标签: perl solaris environment-variables

在“神秘的生产系统”中的Solaris机器上,我正在运行一个引用环境变量的Perl脚本。没什么大不了的。

执行前和执行后来自shell的变量内容是我所期望的。

然而,当脚本报告时,它看起来好像在某个其他子shell中运行,这个子shell在脚本的持续时间内使用不同的值来破坏我的变量。

不幸的是我真的无法粘贴代码。我试图得到一个原子案例,但我在这里结束了。

4 个答案:

答案 0 :(得分:2)

你的脚本或任何你正在使用%ENV散列的库有可能吗?

答案 1 :(得分:1)

您可以通过Perl调试器运行代码以查看它的位置吗?你可以转储pid($$)来检查它是分叉还是调用子壳?

或者,您可以在整个代码中添加打印语句,以缩小环境变量被更改的位置,或者开始删除与故障点上不太相关的组件。

答案 2 :(得分:0)

1)什么版本的Perl?

2)我相信,有些环境变量会被子进程破坏。你能做一个ps吗?

答案 3 :(得分:0)

好的,这是发生了什么:

Perl本身就是一只红鲱鱼。

脚本在子shell中执行,在创建时,它正在重新加载rc文件。那些rc文件正在吹掉我在父shell中用参考副本手动添加的环境变量。

我能够通过一个简单的csh脚本来证明这一点,它只是回应了环境。

对我的rc文件进行了大幅度的破坏(这些文件因为不可思议而过度紧张)清除了神秘的替代品。

更新:证明这是一个“test.sh”的测试有一个简单的“设置”命令。它证明了子shell没有正确地继承父环境。奇怪的是,当我将我的父交互式shell切换到ksh时,环境开始正确继承。