Linux
從 shell 腳本在另一台 linux 伺服器上遠端執行命令
我有一個 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
當直接在伺服器上執行相同的命令時,它會生成所需的輸出,但在遠端執行時不會。
所以我的問題是如何獲得正確的輸出,這是一個好方法嗎?
正如在各個地方解釋的那樣(比如這個http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2007-05/msg00584.html) echo 輸出它的參數,用空格分隔
因此,您要麼必須將反引號中的命令結果作為一個參數傳遞
echo "`some command that outputs multiple lines here`"
或不使用
echo
但例如printf