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.
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 .
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 TempFileA 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 localhostEz 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 .
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>&1megpró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
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 > shlistkap 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.
A szabványos tee parancs képes egy parancs kimenetét egyszerre több helyre irányítani. Példa:
ls -lrt | tee fájl1az ls -lrt parancs szabványos kimenetét (fájlok listája) a konzolra és a file1 -re irányítja .
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
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 EOFVagy 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 EOFA 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.