The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > UNIX for Dummies Questions & Answers > Antworten auf häufig gestellte Fragen > Tipps und Tutorials
.
Google unix.com



Tipps und Tutorials Hilfreiche Texte von unseren Nutzern.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Learning Oracle ADF: A Beginner's Story iBot Oracle-Updates (RSS) 0 04-06-2008 05:10 AM
CEP und die Geschichte der Fische iBot Complex Event Processing RSS News 0 12-17-2007 05:50 AM
Bangkok Post Artikel: Die Geschichte hinter der Linux-Betriebssystem Neo News, Links, Termine und Ankündigungen 0 04-05-2003 09:05 AM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix-Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9119
Die ganze Geschichte auf #! / usr / bin / ksh

Einführung

Ursprünglich haben wir nur eine einzige Shell auf Unix. Wann lief ein Befehl, der Shell würde versuchen, einen der exec ()-System fordert sie auf. Es wurde der Befehl eine ausführbare Datei, die exec gelingen würde und der Befehl ausgeführt. Wenn die exec () nicht, die Shell, die nicht aufgeben, sondern versuchen würde, die Auslegung der Befehl Datei, als ob es sich um ein Shell-Skript. Dies funktioniert, solange es nur eine Shell auf dem System. Aber was ist, wenn Sie mit einer Shell als interaktive und wollen, führen Sie ein Skript in einer anderen Shell die Sprache?

Dies ist, wenn die #! Trick herein Die Idee der Verwendung von #, um einen Kommentar entstand mit csh und wurde schnell in die Bourne-Shell. Jetzt wissen alle Tanks zu ignorieren Zeug nach einem #. So können wir eine führende Linie so etwas wie "#! / Usr / bin / ksh". Um die Shell diese Zeile ist nur ein Kommentar. Aber wenn der Kernel versucht, eine Datei mit dieser Linie, so wird die angegebene exec-Interpreter und die Schrift ist. So Shell-Skripten werden ausführbare ziemlich viel wie wirkliche ausführbare Dateien sind. Nun, wenn eine Shell versucht, exec ein Shell-Skript, es gelingt.

Was passiert, wenn Sie vor der #! line? Nun, die Kernel-exec fehl. Ihre durchschnittliche Schale wird dann versuchen, das Skript selbst. Ein paar Muscheln werden versuchen, um das Skript zu versuchen zu erraten, die Sprache. Dies ist nicht gut. Sie können mit ksh als interaktive Shell und Schreiben von ksh-Skripten. Wenn Sie später switch to bash als interaktive Shell, einige Ihrer Skripte ausführen können, während andere möglicherweise fehl. Auch die Linie ist ein Kommentar , die ein wichtiger Anhaltspunkt für einen Programmierer, der sich auf das Skript, um es zu verstehen. Das Wissen um die Sprache, die der Autor versucht, zu verwenden, ist eine große Hilfe.

Zwar habe ich den Begriff "Shell", tatsächlich diese Technik verwendet werden kann mit vielen Programmen, die nicht Tanks. Hier ist ein "Skript", um eine mehrzeilige Nachricht:
Code:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Dies zeigt, dass "#! / Usr / bin / cat"-Linie, aber auch andere als die, dass es funktioniert ziemlich gut.

Ein Argument

Sie können ein Argument wie folgt aus:
#! / usr / local / bin /perl -w
Aber im Allgemeinen, die Sie auf eins Argument. Auf den meisten Systemen, eine Zeile wie: "#! / Some / Dolmetscher-A-B" wird in "-a-b" ist die als ein einziges Argument. Allerdings ist die einzige Argument ist nicht beschränkt auf, beginnend mit einem Bindestrich. Wir können auf unsere Botschaft Skript:
Code:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Beispiel

Wir setzen all dies zusammen mit einem Beispiel an. Hier ist eine perl Skript, das ich rufe 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";

Die W-fragt perl Frage Warnmeldungen. Das Skript zeigt einfach die Argumente, dann läuft der Befehl ps. Wenn ich es, bekomme ich:
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
$
Beachten Sie, dass die perl Prozess wurde mit 5 Argumente. Das 2. Argument ist der Name des Skripts. Es ist Aufgabe der perl Prozess, um die letzten 3 Argumente als Argument Liste gesehen durch das Skript. Auch erkennen, den Kernel mit der perl Prozess. Danach wird es bis zu perl das Skript zu öffnen und zu lesen, und führen Sie jede Zeile. Dies ist der Grund, warum Skripte müssen lesbar. Sie können nicht ausgeführt eine nicht lesbare Schrift.

Fazit

Dies sollte genügend Informationen, um zu verstehen, was passiert mit den #! Linien. In den folgenden Stellen, werde ich Details zu den verschiedenen Aspekten des Prozesses.
 

Lesezeichen

Tags
perl, perl Verschiebung, Shebang, Schicht, Verlagerung perl

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 07:54 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0