0

わかりました、ここでまた ssh に苦労しています。トークンに基づいてリモート ログ ファイルからデータを取得しようとしています。ssh経由でegrepコマンドで複数のトークンを渡そうとしています:

IFS=$'\n'
commentsArray=($(ssh $sourceUser@$sourceHost "$(egrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log)"))
echo ${commentsArray[0]}
echo ${commentsArray[1]}
commax=${#commentsArray[@]}
echo $commax

$v は以下のようなものですが、長さは動的です。つまり、パイプで区切られた多くのファイル名を持つことができます。

UserComments/propagateBundle-2013-10-22--07:05:37.jar|UserComments/propagateBundle-2013-10-22--07:03:57.jar

私が得る出力は次のとおりです。

oracle@172.18.12.42's password:
bash: UserComments/propagateBundle-2013-10-22--07:03:57.jar/New: No such file or directory
bash: line 1: UserComments/propagateBundle-2013-10-22--07:05:37.jar/nouserinput: No such file or directory


0

注目に値するのは、ログ ファイルのデータにスペースが含まれていることです。したがって、私が与えたコードでは、抽出したい実際のコメントは、次のようなjarファイル名の後に始まります: UserComments/propagateBundle-2013-10-22--07:03:57.jar/

実際のコメントは「New Life Starts here」ですが、ログは、実際には「New」まで取得していて、スペースで壊れていることを示しています。私はIFSを与えようとしましたが、役に立ちませんでした。おそらくリモートで提供する必要がありますが、どうすればよいかわかりません。何か助けはありますか?

4

2 に答える 2

1

あなたのコマンドはegrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log、ローカル マシンで を実行しようとしており、その結果を SSH 経由で実行するコマンドとして渡します。

そのコマンドをリモート マシンで実行するつもりだったのではないかと思います。それを実現するためにインナー$()を削除します(そして引用を修正します):

commentsArray=($(ssh $sourceUser@$sourceHost "egrep '$v' '/$INSTALL_DIR/$PROP_BUNDLE.log'"))
于 2013-10-21T22:08:10.883 に答える
0

fgrep入力からの正規表現の特別な解釈を避けるために使用する必要があります。

commentsArray=($(ssh $sourceUser@$sourceHost "$(fgrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log)"))
于 2013-10-21T22:06:48.217 に答える