Ich möchte per SSH über mehrere Server (Host 1, Host 2 und Host 3) kommunizieren und die Ausgabe mehrerer Befehle (cmd1, cmd2 usw.) in einer Datei (output.properties) auf dem lokalen Server speichern. Ich weiß, dass es einige ähnliche Beiträge gibt, aber ich bin mir nicht sicher, was ich falsch mache. Unten ist der Codeausschnitt.
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
Was ist der Fehler im obigen Skript?
Antwort1
In dieser Zeile:
echo RepCard2=$(expr $(grep -r "sample text" * | wc -l) / 2);
expr
und grep
wird auf dem lokalen System ausgeführt, nicht auf dem SSH-Server. Sie müssen die $
Zeichen maskieren, damit sie im Here-Doc erhalten bleiben und an den Server gesendet werden.
echo RepCard2=\$(expr \$(grep -r "sample text" * | wc -l) / 2);