在包装脚本中运行带有参数的perl脚本
$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中执行一行内容,然后将控件传递回包装器脚本。
我在做这件事的方式有什么不对吗?还有其他出路吗?
在你的脚本中有几点需要注意。
-
用strict和warnings pragma打开脚本。他们是我们的朋友这样
#!/usr/bin/env perl use strict; use warnings;
-
不要标量数据分配到一个数组这样
@pb_ohsdba="pbrun ..."
按照你的意图pb_ohsdba应该是一个标量$ pb_ohsdba。
-
尽量让您的代码易于理解和调试。例如,您可以采取的
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";
@Arunesh你删除的反引号是需要的,因为在原代码中,perl cpu_man.pl的输出被传递给了pbrun。请按照故意编辑和添加反引号。 –
请参考http://perldoc.perl.org/perlop.html#Quote-Like-Operators。第一条语句将执行由反引号分隔的字符串并将其存储到$ cpu_output中。 $ cpu_output将被插入到$ pb_ohsdba中。所以没有问题传递给系统。 –
@Partha Pratim Mukherjee ..我有使用严格使用警告和其他基本要求。甚至试图把它放在像你所建议的标量变量中。它不起作用。 pbrun本身没有工作。 – nidhisha
$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之后,路径改变了。
然而它总是有更好的相对路径。
'cpu_main.pl'包含数据? – ssr1012
这只是另一个Perl子程序的脚本。 – nidhisha
更新您的问题中的perl文件 – ssr1012