Naprej Nazaj Kazalo

3. Vse o preusmerjanju

3.1 Teorija in hitri napotki

Opisniki datoteke so trije - stdin (standardni vhod), stdout (standardni izhod) ter stderr (standardni izhod za napake).

V osnovi lahko:

  1. preusmerite stdout v datoteko
  2. preusmerite stderr v datoteko
  3. preusmerite stdout v stderr
  4. preusmerite stderr v stdout
  5. preusmerite stderr in stdout v datoteko
  6. preusmerite stderr in stdout v stdout
  7. preusmerite stderr in stdout v stderr
1 'predstavlja' stdout in 2 stderr.

Drobno pojasnilo za boljšo predstavo o teh stvareh: z ukazom less si lahko ogledate tako stdout (ki bo ostal v medpomnilniku) kakor stderr, ki se bo izpisal na zaslon, vendar bo izginil, ko se boste poskušali premikati po medpomnilniku.

3.2 Zgled: stdout v datoteko

To bo preusmerilo izhodni tok programa v datoteko.

ls -l > ls-l.txt
V tem primeru bo ustvarjena datoteka z imenom 'ls-l.txt'. V njej bo tisto, kar bi se sicer izpisalo na zaslon, ko bi pognali ukaz 'ls -l'.

3.3 Zgled: stderr v datoteko

Takole lahko standardni izhod za napake preusmerimo v datoteko.

grep da * 2> grep-napake.txt
Ustvarjena bo datoteka z imenom 'grep-napake.txt', v njej pa bo vse, kar bo ukaz 'grep da *' izpisal na stderr.

3.4 Zgled stdout v stderr

Tu bomo izhodni tok stdout preusmerili v isti opisnik datoteke kakor stderr.

grep da * 1>&2
Del izpisa, ki bi sicer šel na stdout, bo v tem primeru preusmerjen na stderr.

3.5 Zgled: stderr v stdout

To bo povzročilo, da bo izhodni tok stderr preusmerjen v isti opisnik datoteke kakor stdout.

grep * 2>&1
Stderr del izhodnega toka bo tako preusmerjen na standardni izhodni tok - če boste ta ukaz prek cevovoda povezali s programom less, boste opazili, da bodo vrstice, ki navadno 'izginejo' (ker so izpisane na stderr), tokrat ostale vidne (ker smo jih preusmerili na stdout).

3.6 Zgled: stderr in stdout v datoteko

Celoten izhodni tok programa bomo preusmerili v datoteko. To včasih pride prav pri izvajanju opravil v cronu, ko želite ukaz "utišati".

rm -f $(find / -name core) &> /dev/null
Ta ukaz (še vedno smo pri vnosu v cron) bo zbrisal vse datoteke z imenom 'core' v kateremkoli imeniku. Naj vas opozorim, da morate biti precej gotovi glede tega, kaj bo ukaz storil, če boste njegov izhod zavrgli.
Naprej Nazaj Kazalo