Portál AbcLinuxu, 12. května 2025 01:47

Dotaz: shell presmerovani stdin a stdout

28.2.2011 13:23 marek
shell presmerovani stdin a stdout
Přečteno: 543×
Odpovědět | Admin

Dobry den.

Sice to funguje ... ale jde to zapsat v sh nebo bash bez fifo, nebo alespon citelneji?

A na /dev/tcp/localhost/8080 se odkazovat nemohu.

#!/bin/sh
mkfifo /tmp/blablafifo
(       telnet 127.0.0.1 8080 < /tmp/blablafifo \
        | ( echo -ne 'GET /serazeno.csv HTTP/1.0\n\n';cat 1>&3) \
        > /tmp/blablafifo \
) 3> serazeno.`date +%s`.csv
rm /tmp/blablafifo
Marek
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.2.2011 13:40 kuka
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna by pomohlo kdybys napsal co to ma delat a proc tam mas to fifo - tzn. pojmenovanou rouru, proc nestaci nepojmenovana? Co ma delat ten "cat 1>&3"?
28.2.2011 13:47 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

Na serveru, kam nemohu nic instalovat a nic tam prakticky nainstalovano neni, potrebuji kazdy den precist data z demona, ktery ma http rozhrani na portu 8080.

Ten priklad vlastne dost neobratne emuluje prikaz wget.

Nevhodne jsem predpokladal, ze kdo to nevidi, tak mi asi take neporadi.

Omlouvam se.

Marek
28.2.2011 15:56 kuka
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
No ja nejak nevidim, proc nejde proste dat telnetu ten prikaz na standardni vstup rovnou

echo -ne 'GET /serazeno.csv HTTP/1.0\n\n' | telnet 127.0.0.1 8080

a vystup zapsat do souboru. Ale neznam telnet, mozna je tam nejaky zadrhel...
28.2.2011 16:16 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

Ten telnet se zavre, jakmile to echo ukonci spojeni na jeho stdin. Takze neceka na to co mu prijde po siti a nezapise to na svuj stdout.

Marek
28.2.2011 16:50 kuka
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
No jo, to je nemile. Slo by udelat neco takoveho

(echo -ne 'GET /serazeno.csv; sleep 5) | telnet 127.0.0.1 8080

ale jestli ten tvuj skript funguje (ja porad uplne nevidim jak vlastne), tak je lepsi v tom, ze to cekani tam neni natvrdo. Pripadne by se dala udelat misto sleep cekaci smycka na neco, napr. nez vznikne soubor s pozadovanym nazvem - nejprve by se musel zapsat vystup jako pomocny a nakonec prejmenovat.
1.3.2011 09:29 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

Ten skript funguje:

vytvori pojmenovanou rouru

pusti telnet, ktery cte z pojmenovane roury

pusti dalsi instanci shellu, ktere stdout je presmerovan do pojmenovane roury:

zapiseme do pojmenovane roury ten GET, a vsechno co prijde na stdin posleme do 3

Tim jsme docilili, ze dokud je co cist (ten cat), tak se nova instance shellu neukonci, a na jeji stdout nic netece.

Pak uz staci 3 zapsat do souboru.

Vlastne by bylo asi lepsi to napsat bez toho 3:

#!/bin/sh
TMPFILE=`mktemp -td  "tel.XXXXXXXXXX"` || exit 1
mkfifo "$TMPFILE/telnetin"
telnet 127.0.0.1 8080 < $TMPFILE/telnetin | (
        echo -ne 'GET /serazeno.csv HTTP/1.0\n\n'
        cat  > serazeno.`date +%s`.csv
) > $TMPFILE/telnetin
rm "$TMPFILE/telnetin"
rmdir "$TMPFILE"
Marek
28.2.2011 13:46 chrono
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nefunguje niečo ako curl -o serazeno.`date +%s`.csv http://127.0.0.1:8080/serazeno.csv (prípadne niečo podobné s wget, lynx...)?
28.2.2011 13:49 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

Nic takoveho bohuzel nemam k dispozici.

Dokonce tam neni ani netcat.

Marek
28.2.2011 16:46 Jirka P
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně to funguje takto:

printf 'GET index.html HTTP/1.0\n\n' | telnet localhost http > /tmp/iindex
28.2.2011 17:07 Jirka P
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
Aha, už to vidím. Co takto:

{ printf 'GET /index.html HTTP/1.0\n\n'; sleep 1d& } | { telnet localhost http > /tmp/iindex; kill %1; }
1.3.2011 09:13 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

To neni spatne.

To puvodni reseni ma ale vyhodu, ze se da vyhodnocovat vystup a podle toho upravovat vsup (pokud ten cat nahradim treba tee a awk).

Vlastne takova emulace prikazu expect.

Mne slo spis o vyreseni toho presmerovani.

Dekuji.

Marek
1.3.2011 10:24 omg
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout
Odpovědět | | Sbalit | Link | Blokovat | Admin
/dev/tcp v basi neni pritomno?
1.3.2011 11:24 marek
Rozbalit Rozbalit vše Re: shell presmerovani stdin a stdout

Dobry den.

NOTE: Bash, as packaged for Debian, does not support using the /dev/tcp and /dev/udp files.

Marek

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.