シェルスクリプトから別の Linux サーバー上でコマンドをリモート実行する

シェルスクリプトから別の Linux サーバー上でコマンドをリモート実行する

2 つの日付間のログ ファイルから詳細を抽出し、出力に対してコマンドを実行してレポートを生成するシェル スクリプトがあります。ログ ファイルは別のサーバーにあり、スクリプトは別のサーバーで実行されます。スクリプトは次のようになります。

#!/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

つまり、複数行ですが、生成される出力は次のようなすべての詳細を含む 1 行です。

 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は引数をスペースで区切って出力します

したがって、コマンドの結果をバッククォートで囲んで1つの引数として渡す必要があります。

echo "`some command that outputs multiple lines here`"

あるいは使わないechoが、例えばprintf

関連情報