2015-02-23 638 views
0

我有一個shell腳本,它從兩個日期之間的日誌文件中提取詳細信息,並在輸出上執行命令以生成一些報告。日誌文件位於不同的服務器上,腳本在不同的服務器上執行。腳本看起來像:從shell腳本在另一臺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'替換'echo''無論什麼''。另請參閱http://porkmail.org/era/unix/award.html#echo – tripleee 2015-02-23 09:18:38

+0

刪除反引號不會產生任何輸出。 – anand 2015-02-23 09:31:36

+0

謝謝我反駁了** \ n **。所以我所做的就是在**「」**內部添加命令,像這樣:'echo「\'command \'」' – anand 2015-02-23 09:55:57

回答

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 
相關問題