Ich habe mit diesem einen Kopf für eine Weile gegen die Wand geschlagen.Bash, während Leseschleife brechen früh
Ich möchte SSH in eine Reihe von Maschinen und überprüfen, ob sie verfügbar sind (Annahme von Verbindungen und nicht verwendet werden). Ich habe ein kleines Skript erstellt, TSSH, das genau das tut:
#!/bin/bash
host=$1
timeout=${2:-1}
ssh -qo "ConnectTimeout $timeout" $host "[ \`who | cut -f1 | wc -l \` -eq 0 ] && exit 0 || exit 1"
Dieses Skript funktioniert ordnungsgemäß. Rückgabe 255 wenn ein Verbindungsproblem aufgetreten ist, 1 wenn die Maschine beschäftigt ist und 0 wenn alles gut ist. Wenn jemand einen besseren Weg kennt, lass es mich wissen.
Also nächste versuche ich und tssh auf meinem Satz von Maschinen mit einer Weile lesen Schleife, und das ist, wo alles schief geht. Die Schleife wird beendet, sobald tssh 0 zurückgibt und niemals die vollständige Menge abschließt.
while read nu ; do tssh "MYBOXES$nu" ; done < <(ruby -e '(0..20).each { |i| puts i }')
Zuerst dachte ich, das war ein Subshell-Problem, aber anscheinend nicht. Jede Hilfe, zusammen mit Kommentaren zu Stil/Inhalt, wäre sehr willkommen! Ich weiß, ich werde mich treten, wenn ich, warum erfahren ...
Ich bin ein ähnliches Problem mit Perl-Net mit :: SSH :: Perl, @ Foo-Bah das Problem wirklich gut beschrieben hat, und die Lösung ist eine leere Zeichenfolge als Parameter an die cmd hinzuzufügen: https://metacpan.org/pod/Net::SSH::Perl#out-err-exit-ssh-cmd-cmd-stdin mein ($ stdout, $ stderr, $ exit) = $ ssh-> cmd ($ cmd, ""); – Thomas