透過多個伺服器進行 SSH 並將多個命令的輸出保存在本機伺服器上的檔案中

透過多個伺服器進行 SSH 並將多個命令的輸出保存在本機伺服器上的檔案中

我想透過多個伺服器(主機 1、主機2 和主機 3)進行 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);

相關內容