2015-02-23 4 views
0

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

#!/bin/sh 
time1=$1 
time2=$2 
echo `ssh -i key [email protected] -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 

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

+0

«Эхо» в обратных окнах - это не только глупо, но и неправильно. Просто замените 'echo \' whatever \ '' 'whatever'. См. Также http://porkmail.org/era/unix/award.html#echo – tripleee

+0

Удаление обратных ссылок не производит никакого вывода. – anand

+0

Спасибо, что я получил его backticks пренебрегает ** \ n **. поэтому я добавил команду внутри ** "" **. Например: 'echo '\' command \ '' ' – anand

ответ

2

Из ваших комментариев выше вы по-прежнему используете «эхо». @tripleee является правильным. Не. Также не используйте бессмысленную кошку в начале - просто переадресовывайте std в следующую команду.

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

some operation to get detail <tmp.log 
Смежные вопросы