Remote untuk-loop melalui SSH

12

Saya memiliki yang berikut dalam sebuah skrip

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

Tapi itu tidak berhasil. Anehnya, saya melihat $ I jumlah garis kembali. Jadi jika saya memiliki sepuluh file, saya melihat sepuluh baris kosong.

Eldelshell
sumber
lihat juga pada opsi GNU Parallel --sshlogin .
Sebastian

Jawaban:

19

Shell lokal Anda menerjemahkan ${i}tanda kutip ganda ( "), jadi perintahnya berhasil

ssh user@some.serv.er "for i in /tmp/foo* ; do echo; done"

Cukup gunakan tanda kutip tunggal ( ') sebagai gantinya dan masalah Anda akan hilang:

ssh user@${server} 'for i in /tmp/foo* ; do echo $i; done'

sumber
1

Hanya berlari ke masalah ini sedikit kembali, dan solusi yang diberikan, sementara itu berfungsi tidak terlalu efektif jika Anda juga menarik variabel dari shell lokal, sebelum ssh Anda membuat array untuk beralih. Agak berantakan sedikit untuk hanya melarikan diri dari $ pada awalnya sehingga akan

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

Yang akan menghindarinya dalam konstruksi lokal, bukan shell ssh yang disebut.

LP
sumber
0

Saya telah memperbarui jawaban di atas untuk mendapatkan port dari daftar juga.

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
Anand Varkey Philips
sumber