私は高低を検索しましたが、この問題の解決策を見つけることができないようです(おそらくそれは存在しませんか?)。これが私の問題です:
ローカルマシンにmyFile.txtというファイルがあります。同じ名前のファイル(myFile.txt)がリモートマシンにあります。両方のファイル構造は次のようになります。
<tag1>November 22, 2012<tag1>
<tag2>version5.8<tag2>
<tag3>ASDFA23RASDF29ASDJ29DJ2<tag3>
どちらのファイルもまったく同じレイアウトです。<tag3>
2つのファイル(ローカルとリモート)の文字列の同期を維持するスクリプトを作成する必要があります。リモートサーバーから文字列を取得<tag3>
し、ローカルマシンの同じ文字列と比較する必要があります。違いがある場合は、リモートの文字列を反映するようにローカルの文字列を変更する必要があります。
これまでに試したこと:awkを使用してローカル文字列を取得し、それを変数に割り当てました。簡単です。リモートサーバーにSSHで接続し、同じ方法を使用してリモート文字列を変数に割り当てようとしました。私の知る限り、これは機能しているようです。問題は、変数が値を持ってローカルマシンに戻らないことです(それが理にかなっている場合)。これは私がこれをしようとしている方法です:
#!/bin/bash
fileName="myFile.txt"
logon="myUserName@remoteServer.com"
localString=$(awk -F "<tag3>" '{print $2}' $fileName)
x=$(ssh $logon "remoteString=$(awk -F "<tag3>" '{print $2}' $fileName); echo $remoteString")
echo "remote string = $x"
if [ $localString == $x ]; then
echo "The 2 auth keys are EQUAL!!!"
else
echo "The 2 auth keys are NOT equal!!!"
fi
$ remoteStringをエコーアウトすると、変数が割り当てられていることがわかります。私の理解では、これはリモートサーバーで発生していますが、コンソールに正しい文字列が出力され、その後に「コマンドが見つかりません」と表示されます。次の行はechoの「remotestring="」です。したがって、$ xはその値を失っているか、適切に割り当てられていません。$ xが何度も割り当てられるこの行を変更しようとしましたが、うまくいきませんでした。
その他のアイデア:これが不可能な場合は、ファイルのscpを実行し、サーバーに持ってきて比較し、コピーしたファイルを削除する必要があるのではないかと考え始めています。ローカルマシンに移動する前に、コピーの名前を変更する必要があります。そうしないと、ファイルが上書きされます。また、このスクリプトは多くのマシンで実行する必要があり、ファイルは3行よりもはるかに大きくなる可能性があるため、安全なコピーを作成する必要がない方が効率的と思われます。diffを調べましたが、1行だけを比較する方法が見つかりません。
私はbashスクリプトにかなり慣れていないので、明らかな何かが欠けている場合はご容赦ください。大変感謝しておりますので、よろしくお願いします。