He estado golpeando mi cabeza contra la pared por un tiempo con esta.Bash while read loop breaking early
Quiero SSH en un conjunto de máquinas y verificar si están disponibles (aceptando conexiones y no usándose). He creado un pequeño script, tssh, que hace precisamente eso:
#!/bin/bash
host=$1
timeout=${2:-1}
ssh -qo "ConnectTimeout $timeout" $host "[ \`who | cut -f1 | wc -l \` -eq 0 ] && exit 0 || exit 1"
Este script funciona correctamente. Devolviendo 255 si hubo un problema de conexión, 1 si la máquina está ocupada y 0 si todo está bien. Si alguien conoce una mejor manera de hacerlo, por favor avíseme.
A continuación, intento llamar a tssh en mi conjunto de máquinas utilizando un ciclo while read, y aquí es donde todo sale mal. El ciclo se cierra tan pronto como tssh regrese a 0 y nunca complete el conjunto completo.
while read nu ; do tssh "MYBOXES$nu" ; done < <(ruby -e '(0..20).each { |i| puts i }')
Al principio pensé que esto era un problema de subshell pero aparentemente no. ¡Cualquier ayuda, junto con comentarios sobre el estilo/contenido, sería muy apreciada! sé que voy a patear a mí mismo cuando me entero de qué ...
estoy teniendo un problema similar con la red de Perl :: SSH :: Perl, @ Foo-Bah ha descrito el problema muy bien, y la solución es añadir una cadena vacía como parámetro al cmd: https://metacpan.org/pod/Net::SSH::Perl#out-err-exit-ssh-cmd-cmd-stdin my ($ stdout, $ stderr, $ exit) = $ ssh-> cmd ($ cmd, ""); – Thomas