2013-05-13 5 views
6

Beispiel einAuswirkungen der Kommentarzeichen (#) Zeilen vor und/oder nach dem Kommentar-like #!/Bin/sh Linie

#!/bin/sh 
# purpose: print out current directory name and contents 
pwd 
ls 

Beispiel zwei

# purpose: print out current directory name and contents 
#!/bin/sh 
pwd 
ls 

Was ist der Unterschied - wenn ich die erste Zeile einen Kommentar mache (#), mit #!/bin/sh als die zweite Zeile, was wird passieren?

Was bedeutet #!/bin/sh?

+0

Es wäre einfacher, wenn Sie Skripte mit den Code-Tags umgeben. Unregelmäßige Schriftart macht es wirklich verwirrend ... – user1581900

+0

#!/Bin/sh gibt den Pfad zur Shell an, der für das Skript verwendet werden soll. Die ähnliche Frage wurde hier beantwortet: http: // stackoverflow.com/questions/8967902/why-do-you-müssen-put-bin-bash-am-anfang-einer-script-datei – user1581900

+2

möglich duplizieren ... http: //stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-gemein-in-einem-unix-shell-script – Peeyush

Antwort

2

Normalerweise wird ein Shell-Skript von Ihrer Standard-Shell ausgeführt, die in der Datei/etc/passwd definiert ist. Sie können jedoch explizit ein Programm definieren, mit dem Ihr Skript ausgeführt werden kann.

Unices verwendet eine allgemeine Methode, um festzustellen, welches Programm zum Ausführen eines bestimmten Skripts benötigt wird (man execve(2)). Wenn das Skript über die richtigen Ausführungsrechte verfügt und in einem Skript die erste Zeile mit #! Zeichen beginnt, wird es von dem später definierten Programm ausgeführt.

Zum Beispiel, wenn die erste Zeile ist #!/usr/bin/awk -f dann wird der Rest der Datei in das awk Programm übergeben werden (so es awk Syntax verwenden hat). Oder wenn ein Makefile mit #!/usr/bin/make -f startet, wird der Rest der Datei an make übergeben. Sie können das Skript als normales Programm starten und das Skript kann in awk oder make (oder was auch immer definiert) Syntax geschrieben werden.

Wenn execve#! nicht als die ersten beiden Zeichen der Datei findet, wird es als normale Skriptdatei betrachtet und es wird ausgeführt wie es ist.

So mit #! Sie können die Skriptsprache bestimmen und Sie müssen nicht wissen, welche Shell von dem anderen Benutzer mit Ihrem Skript verwendet wird. In jeder anderen Zeile #! wird Ihre Standard-Shell interpretiert, die in der Regel nur eine Kommentarzeile ist.

+0

Wenn ich einen Kommentar (#) in der ersten Zeile hinter #!/Bin/sh in der zweiten Zeile gebe, was wird passieren? – Manikanta

+0

@Manikanta: Es ist eine Kommentarzeile in 'sh', also wird es übersprungen. Auf einem Linux-Rechner ist 'ls -l/bin/sh' eine symbolische Verbindung zu bash. – TrueY

+0

@TrueY '/ bin/sh' ist definitiv keine Verbindung zu' bash' auf allen Linux-Systemen, z.B. Debian-basierte Systeme sind vor einiger Zeit auf "Dash" geschaltet worden. Es ist auch nicht die Shell, die nach dem '#!' Sucht, der Kernel tut das. –

1

Was ist der Unterschied zwischen 1. & 2. Shell-Skripte ..?

Kein Unterschied in der Ausgabe. Aber die Zeit, um beide auszuführen, wird etwas anders sein, wenn der Dolmetscher die Zeile eins nach der anderen liest.

wenn ich einen Kommentar (#) in der ersten Zeile hinter #!/Bin/sh in der zweiten Zeile gebe, was wird passieren?

Jede Zeile, die mit (#) begonnen wurde, außer dass der Shebang (#!) Als Kommentar im Shell-Skript behandelt wird.

was bedeutet #!/Bin/sh?

Es ist der Pfad (hier -/bin/sh) zum Interpreter nach dem Shebang (#!). Shell wird versuchen, die nach dem Shebang erwähnte Interpretersprache zu verwenden, um das Skript auszuführen.

+2

Das ist nicht ganz richtig. Abhängig von der Shell, die im Falle eines fehlenden Shebang ausgeführt wird, kann die Ausgabe basierend auf den Merkmalen der betreffenden Shell unterschiedlich sein (nicht für dieses Snippet, sondern für jedes reale Szenario). Außerdem lesen sie normalerweise das Skript Zeile für Zeile nicht, sie lesen blockweise. –

+0

Können Sie kommentieren, wenn die Shebang-Linie im zweiten Beispiel geehrt wird? Mit anderen Worten, ist es erforderlich, dass, wenn Sie einen Shebang wollen, es ** muss ** das erste Ding in Ihrer Akte sein? Keine anderen Kommentare können davor kommen? – FGreg