Цитирование нескольких типов цитат - PullRequest
2 голосов
/ 31 января 2012

Привет У меня есть следующий файл:

$ cat file.txt
col1    col2    col3
zz2 mm  uu
pp3 yy  kk
ss2 tt  ll
zz3 mm  uu
pp23    yy  kk
ss3 tt  ll
ss3 aa  44
33c 22  99

Я хочу отсортировать его с помощью awk с помощью следующей команды unix.Эта команда сортирует файл вкладки сначала по столбцу 1, а затем по столбцу 2.

$ awk 'NR==1; NR > 1 {print $0 | "sort -t\"\t\" -k1 -k2"}' file.txt

, и он отлично работает.

$ awk 'NR==1; NR > 1 {print $0 | "sort -t\"\t\" -k1 -k2"}' file.txt
col1    col2    col3
33c 22  99
pp23    yy  kk
pp3 yy  kk
ss2 tt  ll
ss3 aa  44
ss3 tt  ll
zz2 mm  uu
zz3 mm  uu

Моя проблема начинается, когда я хочу вызвать его, используя Php как bashаргумент.

Мой код работает нормально, если я позвоню

print(shell_exec(/bin/bash -c "ls -l")) 

Теперь я хочу сделать то же самое для команды сортировки.Ниже мой php код:

$inpfile= 'file.txt';
$outfile= 'fileout.txt';
$bash = '/bin/bash ';
print(shell_exec($bash. " -c  \"ls -l\"")); print"<br />";

$command = 'awk \'NR==1; NR > 1 {print $0 | "sort -t\"\t\" -k1 -k2" }\' '.$inpfile . " > " . $outfile; 
print("<br>". $command); //awk 'NR==1; NR > 1 {print $0 | "sort -t\"\t\" -k1 -k2" }' file.txt > fileout.txt

shell_exec($bash. " -c \"$command\""); //Gives error because of improper quotes. 
/*
$escaped = escapeshellarg($command);
$command1 = $bash. ' -c '.$escaped ; 
print("<br>". $command1);
//shell_exec($command1); 
*/

Помощь приветствуется.Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2012

Вам не нужно использовать /bin/bash при использовании функции shell_exec. Весь ваш код можно очистить следующим образом (, и он отлично работает ):

<?php
$inpfile= 'file.txt';
$outfile= 'fileout.txt';
$command = 'awk \'NR==1; NR > 1 {print $0 | "sort -t\"\t\" -k1 -k2" }\' '
           . $inpfile . ' > ' . $outfile; 
var_dump($command);
shell_exec("$command"); // now works fine without any error
?>
0 голосов
/ 31 января 2012

Вы ищете escapeshellarg и escapeshellcmd?

...