File Descriptor of Shell Script

Intro

Néha ilyen parancsokat látunk a shellben:

  • $ ls foo > /dev/null 2>&1

Lehet, hogy első alkalommal nehéz lesz megérteni, mit csinál ez, ezért ez a megjegyzés röviden elmagyarázza.

I/O átirányítás

Tegyük fel, hogy most van egy egyszerű szöveges fájl:

Aegyszerű szöveges fájl.

Most irányítsuk át ennek a fájlnak a tartalmát egy másik helyre:

A fájl tartalmának átirányítása.

A fenti átirányítási műveletben nem látunk semmilyen kimenetet a terminálon, mert a > parancs átirányítja a test.txt tartalmát a következő címreoutput.txt, amely egy szabványos kimenet (stdout).

A standard kimenettel szemben létezik a standard hiba (stdr), pl.

An error occurred during6082>Hiba történt az átirányítási folyamat során.

Hiba történt az átirányítási folyamat során, mert nincs no_such_file.txt nevű fájl az aktuális könyvtárban. Ebben az esetben hiába használjuk a > parancsot, az output.txt állományba nem lehet beírni a tartalmat, mert nincs stdout tartalom, hanem helyette stderror hibaüzenet jelenik meg.

Fájlleíró

A fájlleíró egy nyitott fájl pozitív egész számának tekinthető. Ha 100 nyitott fájlod van, akkor alapvetően 100 megfelelő fájlleíród van.

A Unix/Unix-szerű rendszerekben vannak stdout és stderr fájlleírók is, amelyeknek, hogy világosak legyünk, külön célpontjaik vannak a kimeneteknek.ezekhez a kimeneti célpontokhoz:

  • 1: az stdout
  • 2: az stderr

Az összevonás

A fenti koncepció szerint, ha egy ismert fájl tartalmát egy másik fájlba akarjuk írni, akkor ezt megtehetjük.

A fájl tartalmának átirányítása egy másik helyre az alábbi módonstdout.

Az 1 ezen az oldalon az stdout-ot jelenti, amelynek szintaxisa a következő:

  • >

Tehát amikor azt látod, hogy valaki azt írja from.foo > to.bar, akkor csak kihagyja a

Az stderr átirányításához ugyanígy tehetsz:

Hibaüzenet átirányítása egy másik helyre az stderr-en keresztül.

Ha mind az stdout-ot, mind az stderr-t ugyanarra a helyre szeretné átirányítani, akkor ezt teheti.

A stderr-t az stdout-tal azonos helyre irányítja át.
  • &1 egy 1-es azonosítójú fájlleíróra, azaz az stdout-ra való hivatkozásként használatos.
  • 2>&1 az stderr tartalmának átirányítását jelenti az stdout-ra.

Summary

  • A kimenetnek általában két célja van: stdout és stderr.
  • A kimenetet több helyre is irányíthatjuk, de általában egy fájlba.
  • A fájlleíró használható az stdout (1) és az stderr (2) megkülönböztetésére.
  • a > output_location parancs valójában az 1> output_location parancs rövidítése.
  • A &-t használhatjuk más fájlleírókra való hivatkozásra.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.