Was ist #! / Bin / bash in Shell-Skripten? Was ist der Unterschied zwischen / bin / sh und / bin / bash? Warum funktioniert das Shell-Skript manchmal ohne die Zeilen?


Beste Antwort

#!/bin/bash

Dies wird als Shebang bezeichnet. Es teilt dem Interpreter mit, dass die folgenden Zeilen für Bash geschrieben sind. Führen Sie diese Datei daher als Bash-Skript aus.

#Example: Scripts are usually executed like below:

./scriptName

Der Shebang bestimmt also, wie das Skript zu interpretieren ist. Manchmal kann es folgendermaßen aussehen:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Diese Zeilen bestimmen also, wie die Skripte ausgeführt werden sollen interpretiert und ausgeführt werden. Kommen wir nun zu Warum /bin/sh?

Es zeigt auf eine der konfigurierten Shell, manchmal zeigt sh auf bash, manchmal eine andere Shell wie cshell, dash,zsh ,ksh usw.

Beispiel:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Wenn Sie also #!/bin/sh in Ihrem Skript verwenden, unterscheidet sich das Verhalten Ihres Skripts je nach Shell sh zeigt auf Ihr System. Beachten Sie, dass Sie den Shebang überschreiben können, indem Sie Ihr Skript wie folgt ausführen:

bash scriptName

#or

sh scriptName

In den beiden oben genannten Fällen hat Shebang keinen Einfluss auf die Ausführung und wird von und sh (Shell zeigt darauf).

Antwort

Nun, genau wie sie funktionieren viele Detailebenen, daher sind wir hier ziemlich ungenau. Alle Programme werden ausgeführt, indem ihr Code in einen bestimmten, dedizierten Speicherbereich eingefügt und dann der Einstiegspunkt dieses speicherinternen Codebilds aufgerufen wird. Danach wird das Programm nur noch ausgeführt.

Das Speichern des Codebilds wird vom Betriebssystem ausgeführt und wird als „Starten“ oder Ausführen des Programms bezeichnet. Das Betriebssystem tut dies nur einmal aus eigener Initiative. beim Booten, wenn der Prozess init gestartet wird. Der init -Prozess und seine Nachkommen fordern das Betriebssystem auf, andere Prozesse zu starten, indem sie den exec aufrufen Betriebssystemaufruf.

Die Shell ist auf einmal etwas Besonderes und auch gewöhnlich. Es ist nur ein weiteres Programm, das wie jedes andere ausgeführt wird. Es hat keine besonderen Superkräfte oder besonderen Eigenschaften. Es hat den Zweck, dem Benutzer den Zugriff auf die Dienste des Betriebssystems zu ermöglichen, hauptsächlich zum Starten anderer vom Benutzer angegebener Programme. Es bietet vom Benutzer zugängliche Methoden, mit denen der Benutzer auf das Dateisystem zugreifen und angeben kann, wie einige Standardströme der Datenkommunikation verwendet werden ( stdin , stdout und stderr ).

Shells bieten eine Programmiersprache, die verwendet werden kann Machen Sie Dinge auf automatisierte Weise, treffen Sie Entscheidungen und iterieren Sie, um die Effizienz zu steigern, und arbeiten Sie ohne Benutzerinteraktion. Sie bieten und verwenden eine spezielle Syntax und Notation, die der Benutzer lernen und verwenden muss, um die Programmiersprache und die Befehlszeilenverarbeitung aufzurufen. Die Verarbeitung der Shell-Befehle kann von einem interaktiven Terminal oder von Textdateien mit Skripten erfolgen.

Die Programme, die eine Shell startet, werden als untergeordnete Prozesse der Shell bezeichnet. Jeder Prozess kann einen anderen Prozess starten, daher ist die Shell in diesem Sinne nichts Besonderes. Die Shell ist so optimiert, dass der Benutzer festlegen kann, wie seine untergeordneten Prozesse gestartet werden sollen. Sie können die Hierarchie aller Prozesse auf einem Linux-Host mit dem Befehl

ps -e lf

irgendwo in der Liste anzeigen Der Prozess ps selbst wird als untergeordneter Prozess des Shell-Prozesses angezeigt, mit dem Sie ihn gestartet haben.

Dort sind weitaus mehr Details; viel zu viele, um sie in einer Quora-Antwort zu behandeln.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.