複数のサーバー(host1、host2、host3)を介してSSHを介して複数のコマンド(cmd1、cmd2など)の出力をローカルサーバーのファイル(output.properties)に保存したいと思います。似たような投稿があることを知っていますが、どこで間違っているのかわかりません。以下はコードの断片です。
folderPath="cd /usr/local/apps/tempdir";
echo $folderPath;
eval $folderPath;
# host 1
echo RepCard1=$(expr $(grep -r "sample text" * | wc -l) / 2) >> /usr/local/host1/tempdir/output.properties;
# Server 2
ssh -T user@host2 <<EOF >>/usr/local/host1/tempdir/output.properties;
#alias GetDuplicateCardStats="cd /usr/local/apps/tempdir"
folderPath="cd /usr/local/apps/tempdir";
echo $folderPath;
eval $folderPath;
echo RepCard2=$(expr $(grep -r "sample text" * | wc -l) / 2);
exit
EOF
. /usr/local/host1/tempdir/output.properties;
echo "host 1"
echo $RepCard1
echo "host 2"
echo $RepCard2
# RepCard2 is always executed on Host 1 and print value from host 1
上記のスクリプトにはどのような問題がありますか?
答え1
この行では:
echo RepCard2=$(expr $(grep -r "sample text" * | wc -l) / 2);
expr
grep
SSHサーバーではなくローカルシステムで実行されます。これらの$
文字がここに文書に残ってサーバーに送信されるようにするには、この文字をエスケープする必要があります。
echo RepCard2=\$(expr \$(grep -r "sample text" * | wc -l) / 2);