The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > UNIX for Dummies Spørsmål og svar > Svar på vanlige spørsmål > Tips og Tutorials
.
google unix.com



Tips og Tutorials Nyttige artikler fra våre brukere.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Learning Oracle ADF: A Beginner's Story iBot Oracle Oppdateringer (RSS) 0 04-06-2008 05:10
CEP og historien på fisken iBot Complex Event Processing RSS Nyheter 0 12-17-2007 05:50
Bangkok Post Artikkel: Historien bak Linux operativsystem Neo Nyheter, linker, arrangementer og Kunngjøringer 0 04-05-2003 09:05

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Bli Dato: Aug 2001
Beliggenhet: Ashburn, Virginia
Innlegg: 9115
The Whole Story på #! / usr / bin / ksh

Innledning

Opprinnelig vi bare hadde en skallet på UNIX. Da kjørte en kommando, skallet vil forsøke å påkalle en av exec ()-systemet samtaler om det. Det kommandoen ble en kjørbar, den exec ville lykkes og kommandoen kjøres. Hvis exec () mislyktes, skallet ville ikke gi opp, i stedet ville prøve å tolke kommandoen fil som om det var et shell script. Dette fungerer bra så lenge det bare er ett skall på systemet. Men hva om du bruker et shell som interaktivt og ønsker å kjøre et script skrevet i en annen Shells språk?

Dette er hvor #! Trikset leveres i. Ideen om hjelp # å representere en kommentar kom med csh og ble raskt lagt til i Bourne shell. Nå skall vite å ignorere ting etter et #. Så kan vi legge til en ledende linje noe som "#! / Usr / bin / ksh". Til Shell denne linjen er bare en kommentar. Men hvis kjerne prøver å kjøre en fil med denne linjen, vil det exec spesifisert tolk og pass manuset til den. Så shell scripts bli kjørbar ganske mye som virkelig kjørbare filer er. Nå når et shell prøver å exec et shell script, det lykkes.

Hva om du reiser utenfor #! linjen? Vel, kjernen exec vil mislykkes. Gjennomsnittlig Shell vil deretter prøve å kjøre skriptet selv. Noen skjell vil prøve å inspisere script til å forsøke å gjette språket. Dette er ikke bra. Du kjører kanskje ksh som interaktivt shell og skriving ksh skript. Hvis du senere bytter til bash som et interaktivt shell, noen av skriptene kan fortsette å kjøre mens andre mislykkes. Også linjen er en kommentar som gir en viktig ledetråd til en programmerer som ser på manuset å forstå det. Vet hvilke språk forfatteren forsøker å bruke er en stor hjelp.

Mens jeg har brukt begrepet "shell", faktisk denne teknikken kan brukes med mange programmer som ikke shells. Her er en "script" for å vise en multiline melding:
Code:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Dette viser at "#! / Usr / bin / katt", men annet enn at det fungerer ganske bra.

Passerer et argument

Du kan sende et enkelt argument som dette:
#! / usr / local / bin /perl -w
Men generelt, er du begrenset til en argument. På de fleste systemer, en linje som: "#! / Noe / tolk-a-b" vil resultere i "-en-b" blir vedtatt som et enkelt argument. Men den eneste argumentet er ikke begrenset til å starte med en bindestrek. Vi kan forbedre våre melding skriptet:
Code:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Eksempel

La oss sette alt dette sammen med et eksempel. Her er en perl skript som jeg vil kalle perlargs:
Code:
#! /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";

The-w spør perl utstede advarsler. Skriptet bare viser sine argumenter, og deretter kjører ps-kommandoen. Når jeg kjører den, får jeg:
Code:
$ ./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
$
Legg merke til at perl prosessen ble kalt med 5 argumenter. 2. argumentet er navnet på skriptet. Det er opp til perl prosessen til å presentere den endelige 3 argumenter som argument listen sett av skript. Også innse kjernen startet perl prosessen. Etter det er det opp til perl å åpne script og lese den og kjøre hver linje. Dette er grunnen til at prosedyrer må være leselig. Du kan ikke kjøre en ikke-lesbare skriptet.

Konklusjon

Dette bør være nok informasjon til å forstå hva som skjer med dem #! linjer. I følgende innlegg, vil jeg legge til informasjon om ulike aspekter av prosessen.
 

Hugseliste

Tags
perl, perl skiftarbeid, shebang, skifte, shift perl

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 04:32.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0