2016-12-05 134 views
0
$user="abcd" 
$access="ohsdba"; 

my $log_file="abc.log"; 

my @pb_ohsdba="pbrun $access -u $user -t 1-2 2> /dev/null << EOF 
echo `perl cpu_main.pl $user $log_file` 
EOF"; 
$pb_out=system(@pb_ohsdba); 

这是我如何从包装脚本中执行cpu_main.pl。 pbrun工作正常,但cpu_main.pl不会在传递参数时执行。但是,如果没有传递给cpu_main.pl的参数,脚本运行良好。在包装脚本中运行带有参数的perl脚本

如果传递参数,则只会从cpu_main.pl中执行一行内容,然后将控件传递回包装器脚本。

我在做这件事的方式有什么不对吗?还有其他出路吗?

+0

'cpu_main.pl'包含数据? – ssr1012

+0

这只是另一个Perl子程序的脚本。 – nidhisha

+0

更新您的问题中的perl文件 – ssr1012

回答

0

在你的脚本中有几点需要注意。

  1. 用strict和warnings pragma打开脚本。他们是我们的朋友这样

    #!/usr/bin/env perl 
    use strict; 
    use warnings; 
    
  2. 不要标量数据分配到一个数组这样

    @pb_ohsdba="pbrun ..."

    按照你的意图pb_ohsdba应该是一个标量$ pb_ohsdba。

  3. 尽量让您的代码易于理解和调试。例如,您可以采取的

    perl cpu_main.pl $user $log_file
    输出到一个标量并传递到pbrun这样

    my $cpu_output = `perl cpu_main.pl $user $log_file`; 
    my $pb_ohsdba="pbrun $access -u $user -t 1-2 2> /dev/null $cpu_output";
+0

@Arunesh你删除的反引号是需要的,因为在原代码中,perl cpu_man.pl的输出被传递给了pbrun。请按照故意编辑和添加反引号。 –

+0

请参考http://perldoc.perl.org/perlop.html#Quote-Like-Operators。第一条语句将执行由反引号分隔的字符串并将其存储到$ cpu_output中。 $ cpu_output将被插入到$ pb_ohsdba中。所以没有问题传递给系统。 –

+0

@Partha Pratim Mukherjee ..我有使用严格使用警告和其他基本要求。甚至试图把它放在像你所建议的标量变量中。它不起作用。 pbrun本身没有工作。 – nidhisha

0
$access="ohsdba"; 
my @pb_ohsdba="pbrun $access -u $user -t 1-2 2> /dev/null << EOF 
perl /tmp/SRGAutomation/bin/cpu_main.pl $user $log_file 
EOF"; 
$pb_out=system(@pb_ohsdba); 

需要给出脚本的路径。这是因为在pbrun之后,路径改变了。

然而它总是有更好的相对路径。