Ero sivun ”Standardivirrat” versioiden välillä

Siirry navigaatioon Siirry hakuun
Ordyh (keskustelu | muokkaukset)
p Esimerkki: huom.
Stderr: Virheellinen järjestys komennossa cat tiedosto1 2>&1 > kaikki.txt
Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus
 
(5 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
[[Tiedosto:Stdstreams-notitle.svg|thumb|right|200px|Standardisyöttövirrat tilanteessa, jossa prosessia ajetaan [[terminaaliemulaattori|pääteikkunassa]] tms.]]
[[Tiedosto:Stdstreams-notitle.svg|thumb|right|200px|Standardisyöttövirrat tilanteessa, jossa prosessia ajetaan [[terminaaliemulaattori|pääteikkunassa]] tms.]]
'''Standardivirroilla''' (engl. '''standard streams''') tarkoitetaan Unix- ja Linux-ohjelmien syöttö- ja tulostusvirtoja, joilla ohjelma kommunikoi ajoympäristönsä (useimmiten [[terminaaliemulaattori|pääteikkunan]]) kanssa. Jokaisella [[prosessi]]lla on sen käynnistyksessä avattuna kolme standardivirtaa: ''standardisyöte'' ('''stdin'''), ''standardituloste'' ('''stdout''') ja ''standardivirhe'' ('''stderr'''). Kolmen standardivirran [[tiedostokuvain|tiedostokuvaimet]] (''file descriptor'') ovat numeroitu nollasta kahteen siten, että stanrdisyötteellä on numerokoodi '''0''' ja standardivirheellä numerokoodi '''2'''.
'''Standardivirroilla''' (engl. '''standard streams''') tarkoitetaan Unix- ja Linux-ohjelmien syöttö- ja tulostusvirtoja, joilla ohjelma kommunikoi ajoympäristönsä (useimmiten [[terminaaliemulaattori|pääteikkunan]]) kanssa. Jokaisella [[prosessi]]lla on sen käynnistyksessä avattuna kolme standardivirtaa: ''standardisyöte'' ('''stdin'''), ''standardituloste'' ('''stdout''') ja ''standardivirhe'' ('''stderr'''). Kolmen standardivirran [[tiedostokuvain|tiedostokuvaimet]] (''file descriptor'') ovat numeroitu nollasta kahteen siten, että standardisyötteellä on numerokoodi '''0''' ja standardivirheellä numerokoodi '''2'''.


Kun ohjelma käynnistetään valikosta tai kuvakkeen avulla, sillä ei yleensä ole pääteikkunaa, jonne lähettää standardivirtojaan, eikä näppäimistöä saa yhdistettyä standardisyötteeseen. Osa ohjelmista yhdistää standardivirran johonkin tiedostoon (usein [[piilotiedosto]]on ~/.xsession-errors) tai lokituksesta huolehtivalle ohjelmalle, mutta usein kaikki standardivirrat ohjataan [[laitetiedostot|laitetiedostoon]] /dev/null. Kun ohjelman virheilmoitukset haluaa talteen, sen voi käynnistää komentoriviltä, jolloin standardivirtoja voi käsitellä normaaliin tapaan.
Kun ohjelma käynnistetään valikosta tai kuvakkeen avulla, sillä ei yleensä ole pääteikkunaa, jonne lähettää standardivirtojaan, eikä näppäimistöä saa yhdistettyä standardisyötteeseen. Osa ohjelmista yhdistää standardivirran johonkin tiedostoon (usein [[piilotiedosto]]on ~/.xsession-errors) tai lokituksesta huolehtivalle ohjelmalle, mutta usein kaikki standardivirrat ohjataan [[laitetiedostot|laitetiedostoon]] [[:/dev/null]]. Kun ohjelman virheilmoitukset haluaa talteen, sen voi käynnistää komentoriviltä, jolloin standardivirtoja voi käsitellä normaaliin tapaan.


== Esimerkki ==
== Esimerkki ==
Rivi 35: Rivi 35:
  cat tiedosto1 >& kaikki.txt
  cat tiedosto1 >& kaikki.txt
tai
tai
  cat tiedosto1 2>&1 > kaikki.txt
  cat tiedosto1 > kaikki.txt 2>&1
 
Käytettäessä jälkimmäistä muotoa on huomattava että järjestyksellä on merkitystä. Oletetaan että kirjoitatkin komennon muodossa
<kbd>cat tiedosto1 2>&1 > kaikki.txt</kbd>, ja tiedosto1:stä ei ole olemassa. Tällöin uudelleenohjaus 2>&1 ohjaa stderrin näytölle, koska stdout menee sinne oletuksena (uudelleenohjauksen tekohetkellä). Tämän jälkeen luodaan tyhjä tiedosto kaikki.txt, koska
cat-komennon stdout on tyhjä. Oikea muoto on ylläoleva, siinä catin stdout on jo ohjattu tiedostoon kaikki.txt ja sinne stderrkin menee.
 
Nimestään huolimatta stderr ei ole pelkkä virhe- vaan myös infotuloste. Esimerkiksi dd-komennolla voi kopioida dataa ja muokata sitä muutamalla yksinkertaisella tavalla
 
echo heippa | dd conv=ucase
 
tulostaa HEIPPA ja kertoo sitten stderr-virtaan paljonko dataa käsitteli. Tämä voidaan putkittaa esimerkiksi
 
echo heippa | dd conv=ucase | rev > tulos.txt
 
jolloin putkessa eteenpäin ja lopuksi tiedostoon siirtyy stdout, ja stderr (ja näin mahdolliset virheilmoitukset) tulostuvat heti ruudulle. Tarvittaessa kunkin komennon stderr-tuloste voidaan ottaa talteen em. 2> -merkinnällä.


Standardivirhe eroaa standardisyötteestä myös siten, että se on järjestelmän standardikirjaston tasolla oletuksena [[wikipedia:fi:Puskurimuisti|puskuroimaton]]. Näin ohjelman virheilmoitukset tulostuvat ruudulle aina heti.
Standardivirhe eroaa standardisyötteestä myös siten, että se on järjestelmän standardikirjaston tasolla oletuksena [[wikipedia:fi:Puskurimuisti|puskuroimaton]]. Näin ohjelman virheilmoitukset tulostuvat ruudulle aina heti.
Rivi 59: Rivi 73:
==Katso myös==
==Katso myös==
*[[Komentorivin perusteet]]
*[[Komentorivin perusteet]]
*[[Xargs]]
*[[Nimetty putki]]
*[[Nimetty putki]]


[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
[[Luokka:Komentorivi]]
[[Luokka:Komentorivi]]