您好我有以下文件:
$ 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);
*/
帮助表示感谢。 谢谢
答案 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)
您是否在寻找escapeshellarg
和escapeshellcmd
?