Удаленное выполнение команды на другом сервере Linux из скрипта оболочки

Удаленное выполнение команды на другом сервере Linux из скрипта оболочки

У меня есть скрипт оболочки, который извлекает данные из файла журнала между двумя датами и выполняет команду на выходе для создания некоторого отчета. Файлы журнала находятся на другом сервере, и скрипты выполняются на другом сервере. Скрипт выглядит так:

#!/bin/sh
time1=$1
time2=$2
echo `ssh -i key  user@ip -yes cat file | awk '{if(substr($4,2)>="'$time1'" && substr($4,2)<="'$time2'") print $0;}'` > tmp.log

`cat tmp.log | some operation to get detail`

Ожидаемый результат будет таким:

ip1 date1 - - request1 file1 method1 status1 
ip2 date2 - - request2 file2 method2 status2

т.е. несколько строк, но на выходе получается одна строка, содержащая все детали, например:

 ip1 date1 - - request1 file1 method1 status1 ip2 date2 - - request2 file2 method2 status2

При запуске той же команды непосредственно на сервере она генерирует желаемый вывод, но не при выполнении удаленно.
Поэтому мой вопрос в том, как мне получить правильный вывод и является ли это хорошим способом сделать это?

решение1

Как объяснялось в разных местах (например, здесь)http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2007-05/msg00584.html) echo выводит свои аргументы, разделенные пробелами

Поэтому вам придется либо передать результат команды в обратных кавычках как один аргумент

echo "`some command that outputs multiple lines here`"

Или не использовать echo, но напримерprintf

Связанный контент