Linux

從 shell 腳本在另一台 linux 伺服器上遠端執行命令

  • February 23, 2015

我有一個 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

引用自:https://serverfault.com/questions/670650