The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > UNIX pour les nuls Questions et réponses > Réponses aux questions fréquemment posées > Conseils et Didacticiels
.
google unix.com



Conseils et Didacticiels Des articles de nos utilisateurs.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Learning Oracle ADF: A Beginner's Story iBot Mises à jour d'Oracle (RSS) 0 04-06-2008 05:10 AM
CEP et l'histoire du poisson iBot Complex Event Processing RSS News 0 12-17-2007 05:50 AM
Bangkok Post Article: L'histoire derrière le système d'exploitation Linux Neo Actualités, liens, événements et annonces 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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #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: 9111
The Whole Story sur #! / usr / bin / ksh

Introduction

Initialement, nous avons seulement eu un shell unix. Quand a une commande, le shell afin de tenter d'invoquer l'un des exec () sur les appels système. Elle a été la commande d'un exécutable, le exec de réussir et de la commande à exécuter. Si l'exec () a échoué, la coque ne présente pas de place, il serait plutôt tenter d'interpréter le fichier de commandes comme s'il s'agissait d'un script shell. Cela fonctionne bien tant qu'il n'y a qu'un seul shell sur le système. Mais que faire si vous utilisez un shell interactif et que votre voulez exécuter un script shell dans un autre écrit de la langue?

C'est là que la ligne #! truc entre en jeu. L'idée d'utiliser # pour représenter un commentaire provient de csh et a rapidement été ajouté à la bourne shell. Maintenant, tous les obus de savoir à ignorer stuff après un #. On peut donc ajouter une ligne menant à quelque chose comme "#! / Usr / bin / ksh". Pour la coque de cette ligne est juste un commentaire. Mais si le noyau essaie d'exécuter un fichier avec cette ligne, il sera spécifié exec interprète le script et de passer à celle-ci. Ainsi, les scripts shell exécutable devenir un peu comme de véritables exécutables sont. Maintenant, quand un obus cherche à exec un script shell, il réussit.

Que faire si vous laisser sur le #! ligne? Eh bien, le noyau exec échoue. Votre moyen de shell puis essayez d'exécuter le script lui-même. Quelques coquilles va essayer de vérifier le script d'essayer de deviner la langue. Ce n'est pas bon. Vous mai être en cours d'exécution comme ksh shell interactif et à l'écriture de scripts ksh. Si vous passer de bash comme shell interactif, certains de vos scripts mai continue à courir à mai, tandis que d'autres échouent. Aussi la ligne est un commentaire qui fournit un indice important pour un programmeur qui se penche sur le script de la comprendre. La connaissance de la langue dans laquelle l'auteur est d'essayer de l'utiliser est d'une grande aide.

Si j'ai utilisé le terme "shell", en fait cette technique peut être utilisée avec beaucoup de programmes qui ne sont pas des coquilles. Voici un "script" pour afficher un message multiligne:
Code:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Cela permet d'afficher que "#! / Usr / bin / cat" en ligne, mais d'autres que cela, il fonctionne assez bien.

Passer un argument

Vous pouvez passer d'un seul argument, comme ceci:
#! / usr / local / bin /perl -w
Mais, en règle générale, vous êtes limité à un argument. Sur la plupart des systèmes, une ligne: "#! / Un / une interprète-b" se traduira par "-a-b" être passé en un seul argument. Toutefois, le seul argument ne se limite pas à commencer par un tiret. Nous pouvons améliorer notre message sur le script:
Code:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Exemple

Mettons tout cela avec un exemple. Voici une perl script que je vais appeler 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";

La demande-w perl question des messages d'avertissement. Le script affiche simplement ses arguments, puis exécute la commande ps. Quand je lance, je vous:
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
$
Notez que la perl processus a été appelé avec 5 arguments. Le 2ème argument est le nom du script. Il appartient à la perl processus de présenter la finale 3 arguments que l'argument de la liste vu par le script. Aussi le noyau a commencé à réaliser la perl processus. Après cela, il appartient à perl pour ouvrir le script et de le lire et d'exécuter chaque ligne. C'est pourquoi les scripts doivent être lisibles. Vous ne pouvez pas exécuter un script non-lisible.

Conclusion

Cela devrait être assez d'informations pour comprendre ce qui se passe avec ces #! lignes. Dans les postes ci-après, je vais ajouter des détails sur les divers aspects du processus.
 

Bookmarks

Tags
perl, perl changement, shebang, déplacement, changement perl

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 05:10 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0