Hallo, ich habe folgendes Beispielscript (readtest.sh): #!/bin/bash echo "test" read -t 5 testvar echo $testvar echo "ende" Direkt auf der Console ausgeführt funktioniert das einwandfrei. In diesem Fall soll das Script aber entfernt auf FTP liegen und nur an /bin/sh gepiped werden. Der Einfachheit halber kann man das simulieren mit: cat readtest.sh | /bin/sh Das read wird in diesem Fall komplett ignoriert. Laut manpage ist das Verhalten normal. Was ich benötige ist aber eine Eingabemöglichkeit die nach x Sekunden abbricht damit man derartige Scripte auch automatisiert ausführen kann ohne das es an dieser Stelle ewig auf eine Eingabe wartet. Ich find nüschts... Kennt jemand einen workaround? Danke, Andre -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Thu 02 Apr 2009, Andre Hübner wrote:
ich habe folgendes Beispielscript (readtest.sh):
#!/bin/bash echo "test" read -t 5 testvar echo $testvar echo "ende"
Direkt auf der Console ausgeführt funktioniert das einwandfrei. In diesem Fall soll das Script aber entfernt auf FTP liegen und nur an /bin/sh gepiped werden. Der Einfachheit halber kann man das simulieren mit:
cat readtest.sh | /bin/sh
Also, es tut genau das, was ich erwarten würde: $ cat x.sh #!/bin/bash f() { echo 111; read -t5; echo '>>>'$REPLY'<<<'; echo 222; } f $ echo huhu | ./x.sh 111
huhu<<< 222 $ (sleep 10;echo huhu) | ./x.sh 111 <<< 222 $ cat x.sh | /bin/bash 111 <<< 222 $ (cat x.sh; echo huhu) | /bin/bash 111 huhu<<< 222 $ (cat x.sh; sleep 10; echo huhu) | /bin/bash 111 <<< 222 /bin/bash: line 5: huhu: command not found
Vielleicht ist das, was Du suchst ja sowas: (cat x.sh; read -t4; echo "$REPLY") | /bin/bash wobei Du den Timeout im Script selbst nicht mehr brauchst. Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo,
Vielleicht ist das, was Du suchst ja sowas:
(cat x.sh; read -t4; echo "$REPLY") | /bin/bash
klappt leider nicht ganz. x.sh liegt ja nicht lokal. Wenn ich das per lynx --source ftp://... hole und danach das read ausführe wird x.sh nicht mehr ausgeführt sondern nur angezeigt. sobald ein | zeichen vor einem read kommt ist es mit dem "read" leider komplett vorbei. Danke, Andre -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Andre, Am Donnerstag, 2. April 2009 schrieb Andre Hübner:
Hallo,
Vielleicht ist das, was Du suchst ja sowas:
(cat x.sh; read -t4; echo "$REPLY") | /bin/bash
klappt leider nicht ganz. x.sh liegt ja nicht lokal. Wenn ich das per lynx --source ftp://... hole und danach das read ausführe wird x.sh nicht mehr ausgeführt sondern nur angezeigt.
Verstehe ich nicht. Wenn Du die Datei geholt hast, liegt so doch lokal. Und dann kannst Du doch wie oben beschrieben fortfahren. Also, erst die Datei holen, dann cat...; usw..
sobald ein | zeichen vor einem read kommt ist es mit dem "read" leider komplett vorbei.
Da steht doch keine pipe vor read.
Danke, Andre
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo,
Verstehe ich nicht. Wenn Du die Datei geholt hast, liegt so doch lokal. Und dann kannst Du doch wie oben beschrieben fortfahren. Also, erst die Datei holen, dann cat...; usw.. ne, die Datei soll eigentlich nie lokal liegen. die liegt zentral auf einem ftp wo ich es einfach per lynx --source hole und an /bin/sh pipen will. eine lokale kopie der datei liegt nicht vor.
dann müsste ich das ändern das ich ein script hab das die entfernte datei holt, lokal ablegt und lokal ausführt. dann könnte ich das read sicherlich verwenden da ich nichts pipen muss aber ich hatte gehofft das es auf dem bisherigen weg geht, also direkt einen eingehden stream an /bin/sh weiterpipen und gut...
sobald ein | zeichen vor einem read kommt ist es mit dem "read" leider komplett vorbei. Da steht doch keine pipe vor read. ja, das war nur beispielhaft. weil es ist irgendwie wie ein teufelskreis ich hab auch probiert innerhalb des ersten scriptes dann ein zweites script dass das read enthält per wget zu speichern und dann lokal aufzurufen. dies geht aber genauso schief, dahe rmeinte ich das ein read nicht mehr funktioniert sobald vorher in der aufrufskette irgendwo ein | vorkommt. komische sache...
Danke, Andre -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Thu 02 Apr 2009, Andre Hübner wrote:
Verstehe ich nicht. Wenn Du die Datei geholt hast, liegt so doch lokal. Und dann kannst Du doch wie oben beschrieben fortfahren. Also, erst die Datei holen, dann cat...; usw..
ne, die Datei soll eigentlich nie lokal liegen. die liegt zentral auf einem ftp wo ich es einfach per lynx --source hole und an /bin/sh pipen will. eine lokale kopie der datei liegt nicht vor.
dann müsste ich das ändern das ich ein script hab das die entfernte datei holt, lokal ablegt und lokal ausführt. dann könnte ich das read sicherlich verwenden da ich nichts pipen muss aber ich hatte gehofft das es auf dem bisherigen weg geht, also direkt einen eingehden stream an /bin/sh weiterpipen und gut...
sobald ein | zeichen vor einem read kommt ist es mit dem "read" leider komplett vorbei.
Da steht doch keine pipe vor read.
ja, das war nur beispielhaft. weil es ist irgendwie wie ein teufelskreis ich hab auch probiert innerhalb des ersten scriptes dann ein zweites script dass das read enthält per wget zu speichern und dann lokal aufzurufen. dies geht aber genauso schief, dahe rmeinte ich das ein read nicht mehr funktioniert sobald vorher in der aufrufskette irgendwo ein | vorkommt. komische sache...
Also, ich denke, Du solltest Dein Problem nochmal klar beschreiben. Wahrscheinlich hat das niemand hier voll verstanden, ich zumindest nicht. "read" liest von stdin. Wenn die Shell das Script von stdin liest, liest read eben die nächste Zeile aus dem Script, so wie Du es programmiert hast. Ich habe den Eindruck (wie gesagt, ich habe nicht wirklich verstanden, was Du willst), daß Du mit read irgendwas anderes lesen willst. Meintest Du vielleicht sowas? echo 'echo 111; read -t3 </dev/tty; echo ">>$REPLY<<"; echo 222' | bash Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo,
Meintest Du vielleicht sowas?
echo 'echo 111; read -t3 </dev/tty; echo ">>$REPLY<<"; echo 222' | bash
Ja, das </dev/tty isses wenn ich das simpel anhänge wartet er auf die eingabe auch wenn das script selbst gepiped wird Cool, dank euch Andre -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Andre, Am Donnerstag, 2. April 2009 schrieb Andre Hübner:
ne, die Datei soll eigentlich nie lokal liegen. die liegt zentral auf einem ftp wo ich es einfach per lynx --source hole und an /bin/sh pipen will. eine lokale kopie der datei liegt nicht vor.
Und wenn Du dann schreibst 'cat "lynx --source ....bla.sh"; read .....' ? [...]
Danke, Andre
-- gruß Oliver -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Andre Hübner
-
Oliver
-
Torsten Foertsch