I/O átirányítás

Az I/O átirányítás  egyes operációs rendszerek parancshéjának azon képessége, hogy a szabványos adatfolyamokat egy felhasználó által meghatározott helyre, például egy fájlba irányítsa. A Unix-szerű operációs rendszerekre jellemző , de eltérő mértékben más családok operációs rendszereiben is implementálva.

Szabványos bemeneti kimeneti adatfolyamok átirányítása

Az átirányítás általában a > speciális karakter beszúrásával történik a parancsok közé.
Általában a szintaxis így néz ki: parancs1 > fájl1 - végrehajtja a parancs1 -et, a szabványos kimenetet a fájl1 -be helyezve ; parancs1 < fájl1 végrehajtja a parancs1 parancsot a fájl1 bemenettel ( a billentyűzet helyett ).
A program minden beviteli kérésnél egy sor szöveget olvas be a fájlból. A konstrukciós parancs1 < fájl1 > fájl2 az előző két lehetőséget kombinálja: végrehajtja a parancs1 bemenetét a fájl1 -ből és a kimenetet a fájl2 -be .

Szállítószalagok

A csővezetékek  több program azon képessége, hogy együtt működjenek, amikor az egyik program kimenete közvetlenül egy másik program bemenetére kerül, közbenső ideiglenes fájlok használata nélkül . Szintaxis: parancs1 | A parancs2 végrehajtja a parancs1 parancsot , a kimenetét használva bemenetként a parancs2 végrehajtásakor , ami ugyanaz, mint két átirányítás és egy ideiglenes fájl:

parancs1 > ideiglenes fájl parancs2 < TempFile rm TempFile

A parancsfolyamatok jó példája az echo egy másik paranccsal való kombinálása, hogy interaktivitást érjen el nem interaktív környezetekben, például:

echo -e "Felhasználónév\nJelszó" | ftp localhost

Ez elindít egy ftp klienst, amely csatlakozik a helyi gazdagéphez ( localhost ). A program kérésére beírja az első sort a Felhasználónév , majd a következő beviteli kérésnél beolvassa a Jelszó sort . Az echo parancs sorait \n választja el .

Átirányítás a szabványos fájlleírókból

A Bourne shell -ből származó Unix shellben az előző két lépés javítható egy szám ( fájlleíró ) hozzáadásával közvetlenül az átirányítási karakter elé. Ez a szám határozza meg, hogy melyik adatfolyamot használja az átirányítás. A Unix a következő szabványos bemeneti/kimeneti adatfolyamokkal rendelkezik:

Leíró Név Leírás
0 stdin szabványos bemenet
egy stdout szabványos kimenet
2 stderr Szabványos hibakimenet

Például: parancs1 2> fájl1 végrehajtja a parancs1 parancsot , standard hibát küldve a fájl1 -nek .

A C Shellből származó parancsértelmezőkben az átirányítandó adatfolyam megadásának szintaxisa az, hogy az átirányító karakter után egy & karaktert kell hozzáadni.

Gyakran a szabványos hibafolyamot kombinálják a szabványos kimeneti adatfolyammal, így a hibák és a normál programkimenet együtt feldolgozható. Például:

find / -name .profile > results.txt 2>&1

megpróbálja megtalálni az összes .profile nevű fájlt . Ha átirányítás nélkül fut, ez a parancs keresési eredményeket küld az stdout -nak , és hibaüzeneteket (például elégtelen engedélyeket a védett könyvtárak keresésekor) a stderr -nek . Alapértelmezés szerint ezeket a szerepköröket a konzol tölti be. Ha a szabványos kimenet a results.txt fájlra irányul , a hibák továbbra is a konzolra kerülnek. Ahhoz, hogy a hibákat és a keresési eredményeket is a results.txt fájlba küldjék , a szabványos hiba- és kimeneti adatfolyamokat a 2>&1 használatával kombináltuk .

A 2>&1 > előtti írása nem fog működni, mert amikor az értelmező beolvassa a 2>&1 -et, nem tudja, hova van átirányítva a szabványos kimenet, így a hiba- és kimeneti folyamok nem kerülnek összevonásra.

Ha a kombinált eredményt egy másik program bemenetére kell továbbítani, akkor a 2>&1 sorozatnak meg kell előznie a folyamatjelet | . Például:

find / -name .profile 2>&1 | kevesebbet .

A parancs egyszerűsített formája: parancs > fájl 2>&1 így néz ki: parancs &> fájl vagy parancs >& fájl

Szállítólánc

Az átirányítási és csővezetékes parancsok összeláncolhatók összetettebb parancsok létrehozásához, mint például:

ls | grep '.sh' | rendezés > shlist

kap egy listát az aktuális könyvtár tartalmáról, amely szűrve van, hogy csak a '.sh' -t tartalmazó sorok maradjanak , majd ezt a szűrt listát lexikálisan rendezi, és a végeredményt az shlist fájlba helyezi . Az ilyen típusú konstrukciók gyakran megtalálhatók a shell szkriptekben.

Átirányítás több kimenetre

A szabványos tee parancs képes egy parancs kimenetét egyszerre több helyre irányítani. Példa:

ls -lrt | tee fájl1

az ls -lrt parancs szabványos kimenetét (fájlok listája) a konzolra és a file1 -re irányítja .

Átirányítás a következővel:

A Bash shellben átirányíthat egy, a végéhez fűzött fájlra. Ebben az esetben a fájlban tárolt információk nem törlődnek, hanem minden új információ a fájl végére kerül. Szintaxis: parancs1 >> fájl1

Beágyazott dokumentum

Egyes shell-ek, sőt a magas szintű alkalmazásnyelvek ( PHP , Perl ) lehetővé teszik, hogy a szövegközi dokumentum szintaxisa (lásd Heredoc szintaxis ) magából a programfájlból irányítsa a bemenetet, például a szabványos kimenetre:

macska<<'EOF' Önkényes szöveg kerül ide, beleértve - beleértve a speciális karaktereket EOF

Vagy a végéhez csatolt fájlhoz:

cat<<'EOF'>> fájl Önkényes szöveg kerül ide, beleértve - beleértve a speciális karaktereket EOF

A beágyazott EOF dokumentum végének záró aláírása (tetszőleges érték használható, de gyakran használják az EOF -t  - a jelentés szerint) a sor elején kell kezdődnie.

Linkek