The UNIX and Linux Forums  

Go Back   De Unix-en Linux Forum > Top Forums > UNIX voor Dummies Questions & Answers > Answers to Frequently Asked Questions > Tips en Tutorials
.
google unix.com



Tips en Tutorials Nuttige artikelen van onze gebruikers.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Leren Oracle ADF: A Beginner's Story iBot Oracle Updates (RSS) 0 04-06-2008 06:10
CEP en het verhaal van de Fish iBot Complex Event Processing RSS Nieuws 0 12-17-2007 05:50
Bangkok Post Artikel: Het verhaal achter de Linux-besturingssysteem Neo Nieuws, Links, Evenementen en Aankondigingen 0 04-05-2003 10: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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Locatie: Ashburn, Virginia
Berichten: 9.131
Het hele verhaal op #! / usr / bin / ksh

Inleiding

Oorspronkelijk hadden we alleen een shell op Unix. Toen liep een opdracht, het reservoir zou proberen te beroepen op een van de exec () system calls op. Het was de opdracht een uitvoerbaar, de exec zou slagen en het commando zou lopen. Als de exec () is mislukt, wordt het reservoir niet zou opgeven, in plaats zou proberen om het commando bestand als ware het een shell script. Dit werkt prima, zolang er maar een reservoir op het systeem. Maar wat als u gebruik maakt van een shell als uw interactieve en wilt uitvoeren van een script geschreven in een andere schaal de taal?

Dit is waar de #! truc komt inch Het idee van het gebruik van # om een reactie ontstaan met csh en werd al snel toegevoegd aan de Bourne shell. Nu zijn alle houders weten te negeren spul na een #. Dus kunnen we een leidende lijn iets als "#! / Usr / bin / ksh". Aan het reservoir van deze regel is slechts een opmerking. Maar als de kernel probeert om een bestand met deze lijn, dan zal de opgegeven exec tolk en pas het script aan. Dus shell scripts uitvoerbaar geworden behoorlijk veel als echte executables zijn. Nu bij een shell probeert te exec een shell script, het lukt.

Wat als u de #! lijn? Nou, de kernel exec zal mislukken. Uw gemiddelde schaal zullen dan proberen het script zelf. Een paar granaten zullen proberen te inspecteren het script om te proberen te raden de taal. Dit is niet goed. Je kan worden uitgevoerd ksh als uw interactieve shell en schrijven ksh scripts. Als je later switch to bash als een interactieve shell, enkele van uw scripts kunnen blijven lopen, terwijl anderen misschien niet. Ook de lijn is een opmerking dat is een belangrijke aanwijzing voor een programmeur die kijkt naar het script om het te begrijpen. Weten welke taal de auteur probeert te gebruiken is een grote hulp.

Hoewel ik heb gebruikt de term 'shell', eigenlijk deze techniek kan gebruikt worden met de vele programma's die niet schelpen. Hier is een "script" om een meerregelige bericht:
Code:
#! /usr/bin/cat
Line 1
Line 2 
Line 3

Dit toont dat "#! / Usr / bin / cat" regel, maar andere zijn dan dat, het werkt vrij goed.

Het passeren van een argument

U kunt pas een argument als volgt uit:
#! / usr / local / bin /perl -w
Maar in het algemeen, bent u beperkt tot een argument. Op de meeste systemen, een regel als: "#! / Some / tolk-a-b" zal resulteren in "-a-b" wordt doorgegeven als een argument. Echter, het enige argument is niet beperkt tot, te beginnen met een koppelteken. We kunnen verbeteren op onze boodschap script:
Code:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3

Voorbeeld

Laten we dit alles samen met een voorbeeld. Hier is een perl script dat ik zal bellen 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";


De-w vraagt perl kwestie waarschuwing berichten. Het script gewoon toont haar argumenten, dan loopt het ps commando. Toen ik het draaien, krijg ik:
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
$

Merk op dat de perl proces werd aangeroepen met 5 argumenten. Het 2e argument is de naam van het script. Het is aan de perl proces om de laatste 3 argumenten als het argument lijst gezien door het script. Ook de realisatie van de kernel gestart met de perl proces. Daarna is het aan perl te openen en lezen van het script en het uitvoeren elke lijn. Dit is de reden waarom scripts moeten worden gelezen. U kunt niet uitvoeren van een niet-leesbare script.

Conclusie

Dit moet genoeg informatie om te begrijpen wat er gebeurt met die #! lijnen. In de volgende posten, ik zal meer informatie over diverse aspecten van het proces.
 

Bladwijzers

Labels
perl, perl verschuiving, keet, verschuiven, verschuiving perl

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 07:15.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0