여러 서버를 통해 SSH를 통해 여러 명령의 출력을 로컬 서버의 파일에 저장합니다.

여러 서버를 통해 SSH를 통해 여러 명령의 출력을 로컬 서버의 파일에 저장합니다.

여러 서버(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);

exprgrepSSH 서버가 아닌 로컬 시스템에서 실행 됩니다 . 이러한 $문자가 여기 문서에 남아 서버로 전송되도록 하려면 이 문자를 이스케이프해야 합니다 .

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

관련 정보