我想通过多个服务器(主机 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);