Lernen Sie den Unterschied zwischen Beschaffung und Gabelung in Bash

Lernen Sie den Unterschied zwischen Beschaffung und Gabelung in Bash

Das Hauptaugenmerk dieses Artikels liegt darauf, klar zu verstehen, was passiert, wenn Sie das ausführen Skript gegen Quelle Das Skript in Bash. Erstens werden wir klar verstehen, wie das Programm eingereicht wird, wenn Sie das Skript auf unterschiedliche Weise anrufen.

NOTIZ: Das Erstellen des Skripts mit einer Erweiterung spielt keine Rolle. Das Skript wird auch ohne Erweiterungen gut ausgeführt.

Grundsätzlich beginnt jedes Skript mit einer Zeile namens a Shebang (#!). Der Hash Symbol in Bash wird aber als Kommentare interpretiert Shebang hat eine besondere Bedeutung. Es sagt Bash, das Programm in jedem Dolmetscher einzugeben, in dem Sie erwähnt werden Shebang.

Im Folgenden finden Sie ein Beispielprogramm und ich spreche Bash als meinen Dolmetscher an.

$ cat >> hallo_world.Sch #!/usr/bin/env bash echo "Hallo Welt" $ chmod +x hello_world.Sch 

Um das Skript auszuführen, können Sie es auf zwei Arten tun.

  • Verwenden Sie einen relativen Pfad, um das Skript aufzurufen. Gehen Sie in das Verzeichnis, in dem das Skript vorhanden ist, und laufen Sie aus ./Hallo Welt.Sch.
  • Verwenden Sie den absoluten Pfad, um das Skript aufzurufen. Geben Sie von überall im Dateisystem den vollständigen Pfad zum Skript ein.
$ ./Hallo Welt.sh $ pwd $/home/karthick/hello_world 
Führen Sie das Shell -Skript aus

Lassen Sie uns nun sehen, was passiert, wenn Sie versuchen, Ihr Programm ohne einzureichen Shebang. In Abwesenheit von Shebang, Das Programm wird in irgendeiner aktuellen Shell eingereicht, mit denen Sie in meinem Fall ausführen, ist es Verprügeln (/Bin/Bash).

Lassen Sie mich ein Beispiel demonstrieren. Ich erstelle ein Python -Skript ohne Shebang Und wenn ich das Programm rufe, verprügeln Ich weiß nicht, dass es dieses Programm an den Python -Dolmetscher einreicht sollte, stattdessen wird das Programm in der aktuellen Shell ausgeführt.

$ cat> run-py.Py Echo $ Shell Print ("Hello World") $ chmod +x run-py.py $ ./run-py.py 
Falscher Interpreter im Skript

In diesem Fall können Sie das Programm anrufen, indem Sie erwähnen, auf welchem ​​Dolmetscher es eingereicht werden sollte, oder einfach das hinzufügen Shebang Linie, die immer empfohlen wird.

# welches python3 $ (welche python3)/home/karthick/run_py.py 
Rufen Sie das Skript mit Interpreter auf

Nachdem Sie nun wissen, wie Sie das Skript anrufen, ist der nächste Schritt zu verstehen, was passiert, wenn wir das Skript anrufen. Wenn Sie das Skript wie in den obigen Beispielen gezeigt aufrufen, wird ein untergeordneter Prozess erstellt (Gabel) und das Skript wird dem Kinderprozess übermittelt. Ich habe ein Beispielskript ausgeführt, das gerade den folgenden Befehl ausführt und zeigt, dass das Skript an einen untergeordneten Prozess übermittelt wird.

$ ps -f -Forest | Grep -ich bash 
Gabel

Als Teil des Skripts kann es mehrere untergeordnete Prozesse geben, und das hängt von unserem Code ab. Es ist zu beachten. Ein untergeordneter Prozess kann durch den Exportieren durch den übergeordneten Prozess auf Variablen zugreifen. Der übergeordnete Prozess kann jedoch nicht auf die vom Kinderprozess erstellten Variablen zugreifen.

Schauen Sie sich die folgenden Artikel an, um mehr darüber zu erfahren, wie Variablen funktionieren und wie die Variablen exportieren können.

  • "Linux -Variablen" im Shell -Skript verstehen und schreiben
  • Lernen Sie den Unterschied zwischen $$ und $ bashpid in bash

Beschaffung des Skripts

QuelleIst ein in Shell integrierter Befehl, mit dem die Datei als Argument übergeben und den Code in der aktuellen Shell-Umgebung ausgeführt wird. Ein geeigneter Anwendungsfall, den Sie verwenden, ist die Änderung Ihrer Konfiguration in .bashrc oder .bash_profile und die Änderungen mit dem neu laden Quellbefehl.

$ type -a Quelle 
SHELL BAURNING -Befehl

Es gibt zwei syntaktische Möglichkeiten, um das auszuführen Quellbefehl. Sie können jeden aus zwei Syntaxen auswählen, und es ist von persönlicher Entscheidung.

$ Source File_Name [Argumente] $ . Datei_Name [Argumente] 

Lassen Sie mich zeigen, wie die Quelle tatsächlich funktioniert. Ich werde zwei Shell -Skripte erstellen. Das erste Skript (Modul.Sch) wird einige Variablen und Funktionen halten. Das zweite Skript (Hauptsächlich.Sch) wird die Variable drucken und die Funktion aufrufen.

Datei Modul.Sch.

#!/usr/bin/env bash var1 = $ (echo "Willkommen zu $ ​​1") Funktion F1 () echo "Funktion F1 heißt" 

Datei Hauptsächlich.Sch.

#!/usr/bin/env bash echo $ var1 f1 
Beispielskriptcodes

Legen Sie die Ausführungsgenehmigung für das Skript fest und rufen Sie das Hauptskript an "hauptsächlich.Sch". Jetzt wird dieses Skript versuchen, die Funktion zu finden F1 und variabel Var1 in der aktuellen Shell -Umgebung und fällt mit dem nicht gefundenen Befehl aus.

$ bash main.Sch 
Vor der Beschaffung des Skripts

Führen wir nun den Quellbefehl im Skript aus, mit dem die Variable geladen und in die aktuelle Shell -Umgebung funktioniert und nach zugänglich ist "hauptsächlich.Sch".

Datei Modul.Sch.

#!/usr/bin/env bash var1 = $ (echo "Willkommen zu $ ​​1") Funktion F1 () echo "Funktion F1 heißt" 

Datei Hauptsächlich.Sch.

#!/usr/bin/env Bash -Quellmodul.Sh tecmint echo $ var1 f1 
Beispielskriptcodes mit Beschaffung

Führen Sie nun das Skript noch einmal aus und sehen Sie.

$ bash main.Sch 
Nach der Beschaffung des Skripts

Der Quelle ist sehr nützlich in verprügeln dem modularen Programmieransatz beim Erstellen unserer Shell -Skripte zu folgen. Wir können unseren Code in kleinere Module unterbrechen und in vielen Programmen verwendet werden. Auf diese Weise können wir dem folgen TROCKEN (Wiederhole dich nicht) Prinzip.

Das war's für diesen Artikel. Wir haben kurz den Unterschied zwischen Beschaffung und Gabelung in Bash besprochen. Gehen Sie den Artikel durch und teilen Sie Ihr wertvolles Feedback mit uns.