У меня есть следующий код на месте. Он предоставляет необходимую информацию, однако я хотел бы назначить вывод для переменных.
$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-м столбцами из файла. Однако теперь я хотел бы назначить столбцы переменным для каждой строки, прочитанной в файле.
Есть идеи?
Несколько предложений:
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 );
}
?>
система всегда выводит вывод команды напрямую. Вы можете использовать выходную буферизацию для захвата, но вы должны использовать shell_exec вместо:
$result = shell_exec( $cmd );