请教一个关于UNIX下perl调用脚本设置环境的问题
时间:2010-09-09
来源:互联网
------------------------------------------------------------------
#!/opt/exp/bin/perl
unless ( defined $ENV{ENV_VAL}) {
print " Setting the ENV\n";
system(". set_env");
&print_env;
} else {
&print_env;
}
sub print_env{
print " env value is $ENV{ENV_VAL}\n";
}
------------------------------------------------------------------
其中调用了set_env。
set_env的内容是
------------------------------------------------------------------
ENV_VAL=8
------------------------------------------------------------------
perl 脚本执行的结果是
1. (ENV_VAL 没有设置时)
Setting the ENV
env value is
2. (ENV_VAL 设置为2010时)
env value is 2010
请高人指点为什么会出现第一种运行结果,我期望的运行结果是打印出“env value is 8”。怎么改这个perl脚本才能达到这种效果。
谢谢。
作者: elfzhuyun 发布时间: 2010-09-09
回复 elfzhuyun
system(". set_env"); 在shell 里source进来里面可以,perl不行. 另外system运行的命令是在子shell里面
直接赋值:$ENV{ENV_VAL} = 8
作者: Perl_Er 发布时间: 2010-09-09
回复 Perl_Er
这个我知道,我的例子是简单的set_env脚本,这是一个例子,真实的情况是,set_env脚本可能很大,很复杂,也有可能是其他脚本语言写的,不可能在perl脚本中重写的。
另外,我发现不调用sub,而是将sub的内容直接写在外边也是可行的,运行效果也是我期待的,但是坏处是要重复写两遍,不利于代码维护。
还请大虾赐教。
作者: elfzhuyun 发布时间: 2010-09-09
你写在外面都可以?
作者: Perl_Er 发布时间: 2010-09-09
可以的。实际的代码是
...
my $output_file = "xxxxxxxx.txt";
...
&get_some_infomation;
sub get_some_infomation {
#
# Set the ENV
#
print "\n Setting the ENV, please wait ... \n\n";
system(" . a_command_to_run ");
system(" echo > $output_file");
#
# Get the information
#
print "\n Get the infomation\n";
system ( "b_command_to_run >> $output_file");
...
}
...
(b_command_to_run 需要a_command_to_run设置环境)
问题是a_command_to_run运行时间长,我想在环境设置好的前提下,跳过运行a_command_to_run。
作者: elfzhuyun 发布时间: 2010-09-09
不好意思,这样写还是不行。
我之所以有错觉是因为运行perl脚本之前我运行过设置环境的脚本了。
还是一楼的问题,怎么样在perl脚本中,想k shell一样用". _command_"方式改变脚本的环境。
谢谢大虾了。
作者: elfzhuyun 发布时间: 2010-09-09
作者: yybmsrs 发布时间: 2010-09-09
wc -l bin/setenv
3125 bin/setenv
实际的setenv上千行,当然里边有注释行,它是其他人管理维护的。所以我的perl只能调用它,或者强制用户先运行setenv脚本,在运行本perl工具。
作者: elfzhuyun 发布时间: 2010-09-09
回复 elfzhuyun
你这样在perl里面是得不到那个环境变量的. 除非你在运行这个perl之前先运行那个shell(而且变量必须是export了的). 因为你用system调用执行实在子进程里面,子进程不会影响父进程
作者: Perl_Er 发布时间: 2010-09-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28