For-loop remoto su SSH


12

Ho il seguente in una sceneggiatura

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

Ma non funziona Cosa strana, vedo $ I quantità di linee di ritorno. Quindi, se ho dieci file, vedo dieci righe vuote.


guarda anche l' --sshlogin opzione GNU Parallel .
Sebastian

Risposte:


19

La tua shell locale interpreta le ${i}doppie virgolette interne ( "), quindi il comando funziona

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

Usa 'invece le virgolette singole ( ) e il tuo problema scomparirà:

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

1

Ho appena riscontrato questo problema un po 'indietro e la soluzione fornita, mentre funziona non è troppo efficace se si stanno anche estraendo variabili dalla shell locale, prima di creare un array su cui scorrere. Un po 'più disordinato sarebbe in qualche modo quello di sfuggire a $ inizialmente così sarebbe

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

Il che sarebbe sfuggito al costrutto locale, non alla shell ssh chiamata.


0

Ho aggiornato la risposta sopra per ottenere anche le porte da un elenco.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.