引用多种类型的报价

时间:2012-01-31 19:14:34

标签: php awk quotes

您好我有以下文件:

$ 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

我想使用以下unix命令使用awk对其进行排序。此命令首先在column1上然后在column2上对选项卡文件进行排序。

$ 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 个答案:

答案 0 :(得分:1)

使用shell_exec函数时,不需要使用/bin/bash。您可以像这样清除整个代码(并且工作正常):

<?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
?>

答案 1 :(得分:0)

您是否在寻找escapeshellargescapeshellcmd