Forum » Programiranje » [Linux] Bash pipes
[Linux] Bash pipes
AmokRun ::
Če v terminal vpišem:
Dobim rezultat fgh
Najprej iz stringa "abcdefghijklmn" izreže "efghij" iz tega pa na koncu še "fgh".
Če pa na mesto echo želim nekaj pingat, pa to ne deluje. Na primer:
Zakaj v drugem primeru to ne dela? Če uporabim samo en pipe ping google.com | cut -c 5-10 dela normalno, če pa dodam še enega pa ne dela več.
V čem je problem?
echo abcdefghijklmn | cut -c 5-10 | cut -c 2-4
Dobim rezultat fgh
Najprej iz stringa "abcdefghijklmn" izreže "efghij" iz tega pa na koncu še "fgh".
Če pa na mesto echo želim nekaj pingat, pa to ne deluje. Na primer:
ping google.com | cut -c 5-10 | cut -c 2-4
Zakaj v drugem primeru to ne dela? Če uporabim samo en pipe ping google.com | cut -c 5-10 dela normalno, če pa dodam še enega pa ne dela več.
V čem je problem?
DostMam ::
echo konča stream. ping ne zapre streama, zato drugi cut ne ve kdaj je konec podatkov. Mogoče ping -c 5 ...?
kow ::
Bi bilo dobro, ce bi nekdo bolj tehnicno razlozil. Torej, kaj so file descriptorji, kako je implementiran pipe, kaj je stream itd. Ker drugace je tvoj stavek tezko razumljiv.
Zgodovina sprememb…
- spremenil: kow ()
mr_chai ::
Tako kot so ti zgoraj omenili, ping ti bo v loopu delu v nedogled. Lahko pa nastaviš po koliko paketkih ti zapre stream z -c argumentom.
Tole bi mogl delat: Ampak prosim razloži kaj bi rad dosegel.
ping -c 1 google.com | cut -c 5-10 | cut -c 2-4
Tole bi mogl delat: Ampak prosim razloži kaj bi rad dosegel.
ping -c 1 google.com | cut -c 5-10 | cut -c 2-4
Zgodovina sprememb…
- spremenilo: mr_chai ()
AmokRun ::
Ping sem uporabil samo za primer.
Zanima me kako bi lahko naredil pipeline pri ukazih, ki ne zaprejo streama oz. izpisujejo podatke dokler jih ne prekineš.
Zanima me kako bi lahko naredil pipeline pri ukazih, ki ne zaprejo streama oz. izpisujejo podatke dokler jih ne prekineš.
Zgodovina sprememb…
- spremenilo: AmokRun ()
Randomness ::
ping google.com | stdbuf -oL cut -c 5-10 - | cut -c 2-4 -Takole se to naredi. Hint: buffering
mr_chai ::
Bi bilo dobro, ce bi nekdo bolj tehnicno razlozil. Torej, kaj so file descriptorji, kako je implementiran pipe, kaj je stream itd. Ker drugace je tvoj stavek tezko razumljiv.
Vse v linux jedru je file. :)
File deskriptorji so low level zadeva, načeloma je to samo neka številka, ki označuje odprto povezavo do fajla na disku ali tcp socketa ali block device fajla, character device fajla, direktorija itd.. - v nekem procesu. Kernel ima v ozadju tabelo, ki za vsak odprt file hrani id procesa, ki je odprl/kreiral fajl in file deskriptor (številka), ta pa kaže na file tabelo, ki pa potem hrani pointer do v-noda, ta pa naprej do i-nodea.
Jaz sem že malo ven iz tega, pomojem je pravi naslov tale knjiga https://www.amazon.com/Linux-Programmin...
AmokRun ::
Randomness je izjavil:
ping google.com | stdbuf -oL cut -c 5-10 - | cut -c 2-4 -Takole se to naredi. Hint: buffering
To me je zanimalo. Hvala.
mr_chai ::
Je Randomness razlozil, chai. Ti zal nisi, kljub dobrim namenom.
Vprašal si kaj so file descriptorji ! Na to sem ti odgovoril. Namen mojega odgovora, pa ni bil, da ti bom šel zdej celo arhitekturo operacijskim sistemov razlagat, zato sem ti predlagal knjigo, ker sprašuješ o stvareh, ki terjajo nekaj podlage. Drugače pa se nauči google uporabljati, je fajn zadeva.
Invictus ::
Fant, RTFM, da dobiš nekaj osnov...
Pol pa sprašuj, čeprav neumnosti.
Pol pa sprašuj, čeprav neumnosti.
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
Zgodovina sprememb…
- predlagalo izbris: HotBurek ()
kow ::
Je Randomness razlozil, chai. Ti zal nisi, kljub dobrim namenom.
Vprašal si kaj so file descriptorji ! Na to sem ti odgovoril. Namen mojega odgovora, pa ni bil, da ti bom šel zdej celo arhitekturo operacijskim sistemov razlagat, zato sem ti predlagal knjigo, ker sprašuješ o stvareh, ki terjajo nekaj podlage. Drugače pa se nauči google uporabljati, je fajn zadeva.
Mislil sem na originalno vprsanje. Tudi jaz sem zabluzil, ko sem postavil slaba vprasanja (z namenom, da bolje razlozis). Ce sedaj prav razumem, je odgovor: "razumeti moras kaj je to buffering v standard I/O knjiznici". Ce predpostavimo razumevanje kaj je pipe.
Zgodovina sprememb…
- spremenil: kow ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Različen PING - kako realno testirati povezavo v svet?Oddelek: Omrežja in internet | 2937 (2250) | hojnikb |
» | težave internet (Mint Mate 16)Oddelek: Pomoč in nasveti | 1272 (1179) | MrStein |
» | [bash] Sortiranje fotografij po datumuOddelek: Programiranje | 1450 (1011) | Mike0 |
» | Na internet preko mobitelaOddelek: Omrežja in internet | 2578 (2290) | amigo_no1 |
» | Bash izpis datotekOddelek: Programiranje | 1471 (1293) | BigWhale |