Присвойте awk переменным в переполнении стека

У меня есть следующий код на месте. Он предоставляет необходимую информацию, однако я хотел бы назначить вывод для переменных.

$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-м столбцами из файла. Однако теперь я хотел бы назначить столбцы переменным для каждой строки, прочитанной в файле.

Есть идеи?

-1

Решение

Несколько предложений:

  1. использование heredoc сделать читателя дружелюбным
  2. избежать cat /usr/local/reports/file, awk может читать файл напрямую, нет необходимости использовать cat команда
  3. если вы хотите позаботиться о возвращении статуса использования 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 );
}

?>
1

Другие решения

система всегда выводит вывод команды напрямую. Вы можете использовать выходную буферизацию для захвата, но вы должны использовать shell_exec вместо:

$result = shell_exec( $cmd );
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector