The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > UNIX for Dummies Domande & Risposte > Risposte alle domande più frequenti > Suggerimenti e Tutorial
.
google unix.com



Suggerimenti e Tutorial Articoli utili da parte dei nostri utenti.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Imparare Oracle ADF: A Beginner's Story iBot Oracle Aggiornamenti (RSS) 0 04-06-2008 06:10 AM
CEP e la storia del pesce iBot Complex Event Processing RSS News 0 12-17-2007 05:50 AM
Bangkok Post Articolo: La storia dietro il sistema operativo Linux Neo Notizie, Links, Eventi e Annunci 0 04-05-2003 10: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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.120
Tutta la storia su #! / usr / bin / ksh

Introduzione

Originariamente, si era solo uno shell su unix. Quando era un comando, la shell avrebbe cercato di invocare uno dei exec () chiamate di sistema su di esso. E 'il comando è un eseguibile, exec sarebbe successo e sarebbe il comando. Se il exec () non riuscito, la shell non rinunciare, invece che cercare di interpretare il file di comandi come se si trattasse di uno script di shell. Questo funziona bene fino a quando non vi è solo una shell sul sistema. Ma cosa succede se si utilizza uno shell interattiva e come desidera eseguire uno script di shell in un altro scritto della lingua?

Questo è dove il #! trucco entra L'idea di utilizzare # per rappresentare un commento origine con csh e rapidamente è stato aggiunto alla shell Bourne. Ora tutti i serbatoi in grado di ignorare roba dopo un #. Quindi, si può aggiungere una linea di qualcosa come "#! / Usr / bin / ksh". Per la shell di questa linea è un commento. Ma se il kernel cerca di eseguire un file con questa linea, si exec specificato interprete e passare lo script ad esso. Quindi, gli script di shell eseguibile diventare molto reale, come sono eseguibili. Ora, quando una shell tenta di eseguire uno script di shell, riesce.

Che cosa succede se si lascia fuori il #! linea? Ebbene, il kernel exec non andrà a buon fine. I vostri media shell quindi provare a eseguire lo script stesso. A pochi gusci si tenta di controllare lo script per cercare di indovinare la lingua. Questo non è buono. Potrebbe essere in esecuzione ksh come shell interattiva e la scrittura di script ksh. Se poi passare a bash come shell interattiva, alcuni dei vostri scritti possono continuare a funzionare, mentre altre potrebbero non funzionare. Anche la linea è un commento che fornisce un importante indizio di un programmatore che guarda lo script per capire. Conoscere la lingua che l'autore è il tentativo di utilizzo è di grande aiuto.

Anche se ho usato il termine "guscio", in realtà questa tecnica può essere usato con molti programmi che non sono conchiglie. Qui è un "script" per visualizzare un messaggio multilinea:
Codice:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Questo display che "#! / Usr / bin / cat", ma diverso da quello, funziona abbastanza bene.

Passaggio di un argomento

È possibile passare un singolo argomento come questo:
#! / usr / local / bin /perl -w
Ma, in generale, si sono limitati a uno argomento. Nella maggior parte dei sistemi, una riga come: "#! / Alcuni / interprete-uno-b" si tradurrà in "-a-b '" essere passati come un singolo argomento. Tuttavia, l'unico argomento non è limitata a partire con un trattino. Siamo in grado di migliorare il nostro messaggio di script:
Codice:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Esempio

Mettiamoci tutti insieme con un esempio. Qui è un perl script che chiamerò perlargs:
Codice:
#! /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";

Il w-chiede perl questione dei messaggi di avviso. Lo script visualizza semplicemente i suoi argomenti, poi lancia il comando ps. Quando ho eseguito, ho:
Codice:
$ ./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
$
Si noti che il perl processo è stato chiamato con 5 argomenti. Il 2 ° argomento è il nome dello script. Spetta al perl processo di presentazione della rendicontazione finale 3 argomenti come la lista degli argomenti visto dallo script. Anche la realizzazione del kernel avviato il perl processo. Dopo di che, è fino a perl per aprire e leggere il copione e l'esecuzione di ogni riga. Questo è il motivo per cui gli script devono essere leggibili. Non è possibile eseguire uno script di non-leggibile.

Conclusione

Questo dovrebbe essere di informazioni sufficienti per capire che cosa sta succedendo con quelle #! linee. Nel seguente post, vorrei aggiungere dettagli sui vari aspetti del processo.
 

Segnalibri

Tag
perl, perl turno, shebang, spostamento, spostamento perl

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 06:19 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0