2016-12-05 10 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に渡される引数がない場合、スクリプトはうまく動作します。ラッパースクリプトでpbrunの後に引数を指定してperlスクリプトを実行する

引数が渡された場合、cpu_main.plから1行だけが実行されます。コントロールはラッパースクリプトに戻されます。

私はそれをやっている方法に何か間違っていますか?他の方法はありますか?

+0

'cpu_main.pl'にはデータが含まれていますか? – ssr1012

+0

サブルーチンがほとんどない別のperlスクリプトです。 – nidhisha

+0

あなたの質問のperlファイルを更新してください。 – ssr1012

答えて

0

スクリプトにはいくつか注意が必要です。

  1. 厳密な警告プラグマを使用してスクリプトを開始してください。彼らは、スカラー変数$ pb_ohsdbaである必要があり、あなたの意図pb_ohsdbaを1として、この

    @pb_ohsdba="pbrun ..."

    のような配列にスカラデータを割り当てないでください。この

    #!/usr/bin/env perl 
    use strict; 
    use warnings; 
    
  2. ように私たちの友人です。

  3. できるだけコードを分かりやすくデバッグしてください。たとえば、スクリプトのパスを指定する必要がある。この

    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元のコードのように、削除したbacktickが必要でしたが、perl cpu_man.pl ...の出力がpbrunに渡されました。 backtickを意図的に編集して追加してください。 –

+0

http://perldoc.perl.org/perlop.html#Quote-Like-Operatorsを参照してください。最初の文は、バックティックで区切られた文字列を実行し、$ cpu_outputに格納します。 $ cpu_outputは$ pb_ohsdbaに補間されます。だからシステムにこれを渡すことは問題ありません。 –

+0

@Partha Pratim Mukherjee ..私は厳密に警告を使用し、その他の基本が必要です。 uのようなスカラー変数に入れてみても。それは仕事をしません。 pbrun自体doent仕事。 – 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するスカラー変数に

perl cpu_main.pl $user $log_file
の出力を取り、それを渡すことができます。これは、pbrunの後にパスが変更されるためです。

しかし、常に相対パスを持つ方が良いです。

関連する問題