
두 날짜 사이의 로그 파일에서 세부 정보를 추출하고 출력에 대해 명령을 실행하여 일부 보고서를 생성하는 쉘 스크립트가 있습니다. 로그 파일은 다른 서버에 있고 스크립트는 다른 서버에서 실행됩니다. 스크립트는 다음과 같습니다
#!/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