여러 서버를 통한 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);

exprgrepSSH 서버가 아닌 로컬 시스템에서 실행됩니다 . $문자를 here-doc에 보관하고 서버로 보내려면 문자를 이스케이프해야 합니다 .

echo RepCard2=\$(expr \$(grep -r "sample text" * | wc -l) / 2);

관련 정보