Ero sivun ”Standardivirrat” versioiden välillä

Siirry navigaatioon Siirry hakuun
Kirjoitusvirheen korjaus
Stderr: Virheellinen järjestys komennossa cat tiedosto1 2>&1 > kaikki.txt
Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus
 
(2 välissä olevaa versiota toisen käyttäjän tekemänä ei näytetä)
Rivi 2: Rivi 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'''.
'''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
Nimestään huolimatta stderr ei ole pelkkä virhe- vaan myös infotuloste. Esimerkiksi dd-komennolla voi kopioida dataa ja muokata sitä muutamalla yksinkertaisella tavalla