2013-09-27 179 views
0

我需要在命令中使用變量運行命令。我需要捕獲輸出並將其保存在一行變量或一個數組中,這並不重要。無論如何,它將被粘貼到Tk的文本框中。使用Perl讀取unix命令輸出

我已經試過:

my @array = '$variable_with_command'; 

我真的不能使用:

my $variable = 'unixcommand $variableinside'; 

,因爲裏面的變量,我已經看到了作爲一個建議其他計算器的職位。

它的工作原理爲:

my $readvariable = 'ls -a'; 

,因爲沒有變量裏面,除非有辦法,包括變量和有$ readvariable趕輸出?提前致謝。

這裏是我的代碼(這個印刷零):

sub runBatch { 
    my $directory = "/directpath/directoryuser/sasmodules/"; 
    my $command = 'sasq ' . $directory . $selectBatch; 
    my @batch = system($command); 
    print "This is the output\n"; 
    print "-----------------------------------"; 
    print @batch; 
    print "-----------------------------------"; 
} 
+2

這不會有很多工作要做,在命令中的變量。它與['system'](http://search.cpan.org/perldoc?perlfunc#system)命令沒有做你認爲它的工作。要捕獲外部命令的輸出,您需要使用反引號,'qx()'運算符或['readpipe'](http://search.cpan.org/perldoc?perlfunc#readpipe)。 – mob

+0

謝謝,但是,如果它不是變量我不會有問題。我相信使用反引號是正確的方式,適用於我的問題。我相信Perl似乎有很多解決方案。 –

回答

3

這是在情況下,它可以幫助基於QX評論任何人的答案。

sub runBatch { 
    my @batch = qx(sasq $director); 
    print "This is the output\n"; 
    print "-----------------------------------\n"; 
    print @batch; 
    print "-----------------------------------\n"; 
} 

這其實作品真的很好 - 使用反引號:`

sub runBatch { 
    my $directory = "/path/directory/sasmodules/" . $selectBatch; 
    my $command = `sasq $directory`; 
    #my @batch = command 
    print "This is the output\n"; 
    print "-----------------------------------\n"; 
    print $command; 
    print "-----------------------------------\n"; 
    print $selectBatch; 
}