[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash-Skript, while-Schleife mit ssh



Hallo,

Alexander Skwar <askwar@yahoo.com>:

>Das es übrigens zuerst an ssh und nicht am Remote ./Befehl liegt, kann man
>leicht daran erkennen, das die while Schleife auch dann abbricht, wenn man
>Remote nur zB "hostname" aufruft (also Einen Befehel, der nicht von stdin
>liest).

Tut es das?

harald@local:~/test$ cat daten.txt
1
2
3
harald@local:~/test$ cat loop.sh
#!/bin/bash
cat daten.txt | while read varzeile
do
  echo "********* ${varzeile}"
  ssh remote 'hostname'
done
harald@local:~/test$ ./loop.sh
********* 1
remote
********* 2
remote
********* 3
remote

Wenn ich dagegen 'hostname' durch 'cat' ersetze, dann liest das Kommando auf
der Remote Seite die restlichen Zeilen der Eingabe.

harald@local:~/test$ ./loop.sh
********* 1
2
3

"local" ist hier übrigens Squeeze, "remote" Lenny.

Wenn sich das Skript bei dir anders verhält, kann das zahlreiche Ursachen
haben. Hinter dem simpel aussehenden "ssh host command" kann sich auf der
Remote Seite durchaus viel Komplexität verbergen. Je nach Konfiguration des
sshd wird vielleicht /sbin/login aufgerufen. Es wird die Shell des Benutzers
gestartet, die möglicherweise Startup-Skripte wie z.B. ~/.bashrc abarbeitet.

Daher ist das Skript eine fragile Konstruktion und man sollte auf jeden Fall
ssh mit einer leeren Standardeingabe starten. Die Aussage, dass der ssh
Client von sich aus alles auf der Standardeingabe liest, ist aber nicht
richtig.

Gruß, Harald


Reply to: