• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Wieder mal ein Phänomen mit "while"

regexer

Advanced Hacker
Hallo zusammen!

Ich stehe wieder einmal vor einem Problem, dass ich nicht mal ansatzweise verstehe. Ich habe in einem größerem Script länger gesucht, warum eine while-Schleife nur einmal durchlaufen wird, obwohl sie das eigentlich viele Male tun sollte. Mein Schluss: Ein rsh-Kommando ist schuld daran, obwohl dieses korrekt beendet wird. Folgender Versuchsaufbau soll das ganze verdeutlichen:

Code:
hostname -s  > rechner.txt
hostname -s >> rechner.txt

cat rechner.txt | while read host
do
  echo vor rsh
  rsh $host "echo rsh-test"
  echo RETC $?
done
echo nach for
rm rechner.txt
Die Ausgabe ist komischerweise:
Code:
vor rsh
rsh-test
RETC 0
nach for
Wenn man den rsh auskommentiert erhält man folgendes:
Code:
vor rsh
RETC 0
vor rsh
RETC 0
nach for

Warum???

Noch ein paar Anmerkungen:
- Statt while einen for nehmen funktioniert. Trotzdem will ich wissen warum
- damit der rsh kein passwort verlangt, habe ich mich in die Datei $HOME/.rhosts eingetragen
 

TeXpert

Guru
afaik leiten diese Shells den stdinput um, ich bin mit ssh schon mal über sowas gestolpert, d.h. die Shell (rsh) versucht die restlichen Einträge auch als Input zu verwursten.

afair hatte ich dann als Lösung der ssh den Stdin noch auf dev/null umgebogen...
 
OP
regexer

regexer

Advanced Hacker
TeXpert schrieb:
afaik leiten diese Shells den stdinput um, ich bin mit ssh schon mal über sowas gestolpert, d.h. die Shell (rsh) versucht die restlichen Einträge auch als Input zu verwursten.

afair hatte ich dann als Lösung der ssh den Stdin noch auf dev/null umgebogen...
Jetzt wo du es sagst: Soetwas hatte ich auch schon mal (und sogar hier ins Forum gestellt); allerdings nicht in Verbindung mit while.

Siehe http://www.linux-club.de/viewtopic.php?t=28913

Der Parameter -n hilft auch in diesem Fall.

Peinlich! Irgendwie habe ich das erfolgreich verdrängt. :oops: Zum Glück ist es nicht exakt das selbe...
 
OP
regexer

regexer

Advanced Hacker
TeXpert schrieb:
:lol: wie war das mit der Suchfunktion :p
Du wirst noch mehr lachen: Ich habe die Suchfunktion benutzt und immerhin das hier gefunden: http://www.linux-club.de/viewtopic.php?t=24957

Darum auch mein Titel "Wieder ein Phänomen..."
 
So geht es:

Code:
hostname -s  > rechner.txt
hostname -s >> rechner.txt

cat rechner.txt | while read host
do
  echo vor rsh
  rsh $host "echo rsh-test" </dev/null
  echo RETC $?
done
echo nach for
rm rechner.txt

Ist anscheinend eine eigenart von der Bash. Mit einer ksh auf einem älteren Linux Rechner geht es auch ohne </dev/null


Wo wir gerade bei seltsamen Effekten sind: Habe vorgestern den heftigsten "Shock" in den letzten Jahren bekommen. Hab schon an mir gezweifelt.

Thema "Lokalisierung bash"
=> wenn LC_COLLATE nicht "C" ( oder LANG = C ) setzt mal : "LC_COLLATE=de_DE.utf8" und macht eine "echo [A-Z]*"

Ihr werdet alle Dateien mit "AaBbCcDd...Z" am Anfang sehen.

Großes OOps bei "rm -i [A-Z]*" um nur die Dateien mit Großbuchstaben zu löschen...

Siehe auch: http://cnswww.cns.cwru.edu/~chet/bash/COMPAT chapter 13.

Eine Warnung an alle: Nutzt keine "Character-range" mehr bei bash und Lokalisierung.

Hadhavenoniceday ;-)
 

TeXpert

Guru
haveaniceday schrieb:
So geht es:

Code:
hostname -s  > rechner.txt
hostname -s >> rechner.txt

cat rechner.txt | while read host
do
  echo vor rsh
  rsh $host "echo rsh-test" </dev/null
  echo RETC $?
done
echo nach for
rm rechner.txt

Ist anscheinend eine eigenart von der Bash. Mit einer ksh auf einem älteren Linux Rechner geht es auch ohne </dev/null

danke, dass Du meine Erinnerung bestätigt hast :) bin also doch noch nicht so verkalkt...
 
Oben