it-swarm-ko.tech

SSH를 통한 원격 for-loop

스크립트에 다음이 있습니다.

for server in ${servers[@]}; do
    echo ${server}
    ssh [email protected]${server} "for i in /tmp/foo* ; do echo ${i}; done"
done

하지만 작동하지 않습니다. 이상하게도 $ I 금액의 반품 라인이 표시됩니다. 그래서 10 개의 파일이 있으면 10 개의 빈 줄이 보입니다.

12
Eldelshell

로컬 셸은 ${i} 큰 따옴표 ("), 따라서 명령은

ssh [email protected] "for i in /tmp/foo* ; do echo; done"

작은 따옴표 (') 대신 문제가 사라집니다.

ssh [email protected]${server} 'for i in /tmp/foo* ; do echo $i; done'
19
user601

이 문제가 조금 거슬러 올라 갔고 주어진 해결책은 작동하지만 ssh 전에 배열을 반복하기 전에 로컬 셸에서 변수를 가져 오는 경우에는 너무 효과적이지 않습니다. 조금 더 지저분해질 것입니다.

"for i in /tmp/foo* ; do echo \${i}; done"

호출 된 ssh 쉘이 아닌 로컬 구조 내에서 이스케이프합니다.

1
L.P.

목록에서 포트를 가져 오기 위해 위의 답변을 업데이트했습니다.

for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
        for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
        do
                (echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
        done
done
0