2016-12-05 177 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之後,路徑改變了。

然而它總是有更好的相對路徑。