在“神秘的生产系统”中的Solaris机器上,我正在运行一个引用环境变量的Perl脚本。没什么大不了的。
执行前和执行后来自shell的变量内容是我所期望的。
然而,当脚本报告时,它看起来好像在某个其他子shell中运行,这个子shell在脚本的持续时间内使用不同的值来破坏我的变量。
不幸的是我真的无法粘贴代码。我试图得到一个原子案例,但我在这里结束了。
答案 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时,环境开始正确继承。