
我有一個 shell 腳本,它從兩個日期之間的日誌檔案中提取詳細信息,並在輸出上執行命令以產生一些報告。腳本看起來像:
#!/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