Ho sbattuto la testa contro il muro per un po 'con questo.Bash durante la lettura dell'inizio del ciclo iniziale
Desidero SSH in un set di macchine e verificare se sono disponibili (accettare connessioni e non essere utilizzate). Ho creato un piccolo script, tssh, che fa proprio questo:
#!/bin/bash
host=$1
timeout=${2:-1}
ssh -qo "ConnectTimeout $timeout" $host "[ \`who | cut -f1 | wc -l \` -eq 0 ] && exit 0 || exit 1"
Questo script funziona correttamente. Restituendo 255 se c'era un problema di connessione, 1 se la macchina è occupata e 0 se tutto è buono. Se qualcuno conosce un modo migliore per farlo, per favore fatemelo sapere.
Quindi dopo provo a chiamare tssh sul mio set di macchine usando un ciclo while read, e questo è dove tutto va storto. Il ciclo termina non appena tssh restituisce 0 e non completa mai il set completo.
while read nu ; do tssh "MYBOXES$nu" ; done < <(ruby -e '(0..20).each { |i| puts i }')
All'inizio ho pensato che si trattasse di un problema di subshell ma apparentemente no. Qualsiasi aiuto, insieme a commenti su stile/contenuto, sarebbe molto apprezzato! so che sto andando a calci me quando ho scoperto il motivo per cui ...
Sto avendo un problema simile con Net Perl :: :: SSH Perl, @ Foo-Bah ha descritto il problema molto bene, e la soluzione è quella di aggiungere una stringa vuota come parametro al cmd: https://metacpan.org/pod/Net::SSH::Perl#out-err-exit-ssh-cmd-cmd-stdin mio ($ stdout, $ stderr, $ exit) = $ ssh-> cmd ($ cmd, ""); – Thomas