2013-09-27 2 views
0

Мне нужно запустить команду с переменными внутри команды. Мне нужно захватить вывод и сохранить его либо в одной строке, либо в массиве, это не имеет значения. Он будет вставляться в текстовое поле в Tk в любом случае.Чтение вывода команды unix с помощью Perl

Я пробовал:

my @array = '$variable_with_command'; 

Я не могу использовать:

my $variable = 'unixcommand $variableinside'; 

из переменной внутри, я видел, что как предложение других StackOverflow сообщения.

Он работает:

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

Это ответ в случае, если это помогает любому основанному на комментарии ого.

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; 
}