Unix-opas, luku 5 Muita toimintoja ja sovelluksia Unix-koneissa:

Syötön ja tulostuksen ohjaus

Perusteita

Usein Unix-komennot ja Unixissa ajettavat ohjelmat lukevat ns. standardisyöttövirrasta (standard input, stdin) ja tulostavat normaalin tulostuksen standarditulostusvirtaan (standard output, stdout) ja virheilmoitukset mahdollisesti standardivirhevirtaan (standard error output, stderr). Oletusarvoisesti standardisyöttövirta tulee käyttäjän näppäimistöltä ja standarditulostusvirta ja standardivirhevirta menevät käyttäjän kuvaruudulle.

Edellä mainitut "virrat" voi kuitenkin eri tavoin määrätä toisenlaisiksikin, esimerkiksi siten, että komennon tulostus ei mene kuvaruudulle vaan tiedostoon.

Tulostuksen ohjaus

Kirjoittamalla komennon loppuun

>tiedostonnimi

saadaan aikaan, että komennon tulostus ei kirjoitu kuvaruudulle vaan ilmoitettuun tiedostoon.

Tämä tulostuksen uudelleenohjaus ei kuitenkaan välttämättä koske kaikkea sitä, mikä muutoin tulostuisi ruudulle, vaan virheilmoitukset saattavat silti tulostua päätteelle.

Annetun tiedostonnimen tulisi olla sellainen, että sennimistä tiedostoa ei ole ennestään olemassa. Jos tiedosto on jo olemassa, toiminta on erilaista eri Unixeissa: joissakin tiedoston vanha sisältö häviää, joissakin taas koko komennon suoritus epäonnistuu.

Esimerkiksi komento
ls -a mail/
tulostaa hakemiston mail/ kaikki tiedostojen nimet päätteen näytölle, mutta komento
ls -a mail/ >mail-hakemistoni
kirjoittaa kyseisen tiedostolistauksen tiedostoon nimeltä mail-hakemistoni.

On myös mahdollista ohjata tulostus olemassaolevaan tiedostoon sen vanhan sisällön perään. Tämä tehdään käyttämällä kahta peräkkäistä >-merkkiä. Esimerkki:

grep foo bar >>loydetyt
On mahdollista, että vaikka tulostus on ohjattu tiedostoon, osa tulosteista tulee silti kuvaruudulle. Tällöin käytettävä ohjelma ei tulostakaan standardisyöttövirtaan. Tavallisin tällainen tilanne on, että ohjelma tulostaa virheilmoitukset erilliseen "standardivirhevirtaan" stderr. Sekin on uudelleenohjattavissa, joskin eri shelleissä eri tavoin. T-shellissä menettely on, että käytetään >-merkin asemesta merkkiparia >&, jolloin sekä normaali tulostus että virheilmoitukset menevät ilmoitettuun tiedostoon. Esimerkki (jossa on kyse siitä, että C-kääntäjän virheilmoitukset halutaan ohjata tiedostoon):
cc prog.c >& prog.msg

Syötön ohjaus

Kirjoittamalla komennon loppuun

<tiedostonnimi

saadaan aikaan, että komento lukee syöttötietoja kyseisestä tiedostosta sen sijaan, että käyttäjä näpyttelisi tiedot näppäimistöltään.

Tätä mahdollisuutta voi käyttää myös yhdessä tulostuksen ohjauksen kanssa, esim.
omaohj <datat.txt >tulos.txt