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.
--sshlogin
.Jawaban:
Shell lokal Anda menerjemahkan
${i}
tanda kutip ganda ("
), jadi perintahnya berhasilCukup gunakan tanda kutip tunggal (
'
) sebagai gantinya dan masalah Anda akan hilang:sumber
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.
sumber
Saya telah memperbarui jawaban di atas untuk mendapatkan port dari daftar juga.
sumber