Bemutatkozás
Eredetileg, csak volt egy shell Unix. Amikor szaladt a parancsot a héj igyekeznek élni az egyik exec () rendszer kéri azt. Ez a parancs egy végrehajtható, a exec sikerül, és a parancs lenne. Ha az exec () sikertelen, a héj nem adja fel, hanem azt próbálja meg értelmezni a parancs fájlt, mintha egy shell szkriptet. Ez működik jól, amíg csak egy shell a rendszerben. De mi van akkor, ha ön használ egy borító, mint az interaktív és szeretnénk futtatni egy szkriptet írni, egy fiktív nyelvét?
Ez az, ahol a #! trükk Bejön ötlete segítségével # képviseletére hozzászólhass származik csh és gyorsan hozzá a Bourne héj. Most minden kagyló tudja, hogy figyelmen kívül hagyja dolgok után #. Így tudunk hozzáadni vezető vonal valami hasonló "#! / Usr / bin / ksh". A borító is ezt a vonalat csak egy megjegyzés. De ha a rendszermag megpróbálja végrehajtani a fájlt, ezt a vonalat, akkor a megadott exec tolmács és átadni a forgatókönyvet is. Így vált shell szkriptek futtatható csinos, mint a tényleges futtatható. Most, amikor a héj próbál futtatni egy shell scriptet, hogy sikerül.
Mi van, ha hagyjuk ki a #! sor? Nos, a kernel exec sikertelen lesz. Az átlagos shell majd megpróbálja futtatni a szkriptet is. Néhány shells megpróbálja ellenőrizni a forgatókönyvet, hogy megpróbálja kitalálni a nyelvet. Ez nem jó. Lehet, hogy fut, mint a KSH interaktív héj és írásban KSH scripts. Ha később váltani a bash egy interaktív héj néhány szkriptjeidben továbbra is fut, míg mások nem. Ugyancsak a sor
egy komment hogy fontos, hogy clue programozó, aki megvizsgálja a szkriptet értem. Tudván, milyen nyelven a szerző próbál használata nagy segítséget.
Bár már használta a "fiktív", valójában ezt a technikát lehet használni a sok program, hogy nem készültek. Itt van egy "forgatókönyvet" a kijelző a többsoros üzenet:
Kód:
#! /usr/bin/cat
Line 1
Line 2
Line 3
Ez jelenik meg, hogy a "#! / Usr / bin / cat" sor, de más, mint, hogy működik jól.
Elhaladunk az érvelés
A lépés egyetlen érvet, mint ez:
#! / usr / local / bin /
perl -w
De általában, ha a korlátozás az
egy érv. A legtöbb rendszeren, a sort: "#! / Néhány tolmács-a-b" fog eredményezni "-a-b" átadták az egyetlen érv. Ugyanakkor az egyetlen érvet nem korlátozódik kezdve egy kötőjel. Meg tudjuk javítani az üzenetünk script:
Kód:
#! /usr/bin/sed 1d
Line 1
Line 2
Line 3
Példa
Tegyük fel, hogy mind ez együtt egy példát. Itt van egy
perl parancsfájlt, hogy én is fel perlargs:
Kód:
#! /usr/local/bin/perl -w
#! /usr/local/bin/perl -w
print "script name is ", $0, "\n";
while (@ARGV) {
$ARGV = shift @ARGV;
print "argument ", $i++, " is ", $ARGV, "\n";
}
system "ps -f -ww";
A-w kéri
perl kérdés figyelmeztető üzeneteket. A szkript csak megjeleníti az érveit, majd végig a ps paranccsal. Amikor fut, én kapjuk:
Kód:
$ ./perlargs one two three
Name "main::i" used only once: possible typo at ./perlargs line 10.
script name is ./perlargs
argument 0 is one
argument 1 is two
argument 2 is three
UID PID PPID STIME TTY TIME CMD
perderabo 69 1 17:47:28 n01 0:00.24 /bin/ksh -l
perderabo 201 69 18:28:22 n01 0:00.03 /usr/local/bin/perl -w ./perlargs one two three
perderabo 2055 201 18:28:22 n01 0:00.01 ps -f -ww
$
Figyeljük meg, hogy az
perl folyamatot hívják az 5 érveit. 2. Az az érv is a neve a forgatókönyvet. Rajtunk múlik, hogy a
perl folyamat, hogy az utolsó 3 érvek alapján, mint a paraméterek listája látta a forgatókönyvet. Is rájönnek a kernel kezdett a
perl folyamatban. Azután, hogy a
perl megnyitni a forgatókönyvet, és olvassa el és hajt végre minden egyes sorban. Ez az oka annak, hogy parancsfájlokat kell olvasható. Nem tud végrehajtani egy nem olvasható forgatókönyvet.
Következtetés
Ez elég információ, hogy megértse, mi történik azokkal a #! sor. Az alábbi helyek, majd adjunk hozzá részletek a különböző aspektusai a folyamatot.