Parancshoz, ha argumentumként - -t használ fájlnév helyett STDIN vagy STDOUT jelent.
-
De ebben a példában egy
-nevű fájlt hoz létre:echo hello > -Hogyan érhetem el, hogy a
-ebben a példában STDOUT-ot jelent? -
Ezzel ellentétben hogyan tehetem
--nevű fájlt a következő példákban:cat -
Megjegyzések
Válasz
A - fájlnévként való használata az stdin / stdout jelentésére olyan konvenció, amelyet sok program használ. Ez nem a fájlnév különleges tulajdonsága. A kernel nem ismeri fel a (z) - fájlt speciálisként, ezért minden olyan rendszerhívás, amely fájlnévként hivatkozik a - fájlra, a következőt fogja használni: - szó szerint fájlnévként.
A bash átirányítással a - nem ismerhető el speciális fájlnévként, ezért a bash ezt szó szerinti fájlnévként fogja használni.
Amikor a cat fájlnévnek tekinti a - sztringet, a stdin szinonimájaként kezeli. Ahhoz, hogy ezt megkerülje, meg kell változtatnia a cat által látott karakterláncot oly módon, hogy még mindig a - nevű fájlra utal. Ennek szokásos módja, ha a fájlnevet előtaggal – ./- vagy /home/Tim/- adja meg. Ezt a technikát használják olyan hasonló problémák kiküszöbölésére is, ahol a parancssori beállítások ütköznek a fájlnevekkel, így a ./-e néven említett fájl nem jelenik meg a -e parancssori opció például egy programhoz.
Megjegyzések
- Ez ' s érdemes hozzátenni, hogy a
/dev/stdinés a/dev/stdoutuniverzálisan elérhetőek, és a-konvenció. - @jmtd: / dev / std {be, ki} nem érhetők el egyetemesen. Nem minden unix-en van.
- Érdekes, feltételeztem, hogy a POSIX részei (de ' nem erősíthetik meg). ' legalább Linuxon, a BSD-ken és a Solaris-on vannak jelen. Mondana példát egy modern UNIX-ra, amelyből hiányzik?
- @camh Nem biztos abban, hogy megkapta-e az értesítést, és ez egy nagyon-nagyon régi téma; Én ' nem vagyok biztos benne, hogy tudsz-e, de én ' nagyon kíváncsi vagyok, ha tudod a ' kérdés? 🙂
- @jmtd úgy tűnik, hogy kísérleti választ találtam a következő kérdésre: unix.stackexchange.com/a/278368/31669
Válasz
-
A
echo hello > -, használhatja aecho hello > /dev/stdoutparancsot.Míg a “-” egy olyan konvenció, amelyet minden támogatni kívánó programnak végre kell hajtania,
/dev/stdin,/dev/stdoutés/dev/stderrtámogatott, ha az operációs rendszer támogatja (legalábbis a Solaris, a Linux és a BSD) , függetlenül az alkalmazástól, majd a szándékának megfelelően fog működni.
Válasz
Mint camh említett , a - csak egy elnevezési eljárás, amelyet egyes programok használnak.Ha ezekre a folyamokra egy fájlleíróval kíván hivatkozni, amelyet a shell felismer, a jiliagre helyes volt , amikor a /dev/stdin vagy /dev/stdout helyett. Ezeknek a fájlneveknek minden olyan helyen működniük kell, ahol egy normális fájlnév működne.
-
Ennek ellenére az első példád buta. Bármely olyan kimenet, amelyet az átirányító operátor elkapna egy fájlba való íráshoz, már BE van kapcsolva a normál kimeneten, így hiába irányítja át és írja vissza oda, ahonnan jött. Az ott használt viselkedés a cső, nem pedig az átirányítás:
echo hello | -
A második példában egyszerűen meg kell adnia néhányat jelzi, hogy egy ilyen nevű lomfájlt szeretne, nem pedig a belső álnevét. Ezt úgy teheti meg a legkönnyebben, ha megadja a fájl elérési útját, így:
cat ./-
Válasz
Ami az 1-et illeti, a programnak támogatnia kell. Nem lehet önkényesen használni. Ami a 2-et illeti, irányítsa át a bemenetet (pl. cat < -).
Válasz
A “-” megközelítésnek sok problémája van. Először is a “-” karakter értelmezésére van szükség, és sok program nem hajt végre ilyen értelmezést. Ezenkívül vannak olyan programok, amelyek a kötőjelet a parancssori opciók végét jelző elválasztóként értelmezik. A programokat fájlnév-argumentumokkal dolgozták, a “-” megközelítés hack, szép, de gyenge.
A legjobb módszer:
$ echo hello > /dev/fd/1
/dev/stdout a /dev/fd/1
megjegyzések
- Az átirányítást a shell értelmezi, nem a meghívott program.
Válasz
A speciális karaktereknek többnyire két jelentése van:
ASCII numerikus diagram.
Szkript vagy szimbolikus.
Lehetséges, hogy egyetlen karakter egy karakterláncot képvisel, vagy karakterként karakterláncként működik. Értelmezésem szerint.
C nyelven >
függvény két argumentumot vesz igénybe: az első fájlfolyamot és a második módot, amelyben a fájl megnyílik. Az üzemmód egy karakterlánc. Még akkor is, ha egyetlen karakter.
cat > " – " működik.
2>&-szerkesztés is, ami azt jelenti, hogy " 2 szoros leíró ".