我有以下代码。它提供了所需的信息,但是我想将输出分配给变量。
$cmd = "ssh machine 'cat /usr/local/reports/file.dat | awk -F'[[:space:]][[:space:]][[:space:]]*' '{print \"<tr><td>\"$2\"</td><td>\"$3\"</td></tr>\"}'";
system($cmd);
这正确运行并生成一个包含文件中第2列和第3列的表。但是,我现在想将列分配给文件中读取的每一行的变量。
有什么想法吗?
答案 0 :(得分:2)
system始终直接输出命令输出。您可以使用输出缓冲来捕获它,但您应该使用shell_exec代替:
$result = shell_exec( $cmd );
答案 1 :(得分:1)
很少有建议:
heredoc
使读者更友好cat /usr/local/reports/file
,awk
可以直接读取文件,不需要使用cat
命令exec()
功能来处理返回状态。
shell_exec()
将所有输出流作为字符串返回。 exec
默认返回输出的最后一行,但可以将所有输出作为指定为第二个参数的数组提供。以下是代码段
<?php
$cmd =<<<EOF
ssh user@host "awk -F'[[:space:]][[:space:]][[:space:]]*' '{
print \"<tr><td>\" $2 \"</td><td>\" $3 \"</td></tr>\"
}
' /usr/local/reports/file.dat 2>&1"
EOF;
/*
execute command in 1st argument,
save output in array in 2nd argument
store status in 3rd argument
*/
exec($cmd, $out, $return);
if($return==0)
{
print_r($out);
/* your case you can just
echo implode(PHP_EOL, $out);
*/
}else{
/* Failed to execute command
do some error handling */
die( 'Failed to execute command : '. $cmd );
}
?>