Naucz się różnicy między pozyskiwaniem a rozwidleniem w Bash

Naucz się różnicy między pozyskiwaniem a rozwidleniem w Bash

Głównym celem tego artykułu jest jasne zrozumienie, co dzieje się podczas uruchomienia skrypt vs źródło Skrypt w Bash. Po pierwsze, jasno zrozumiemy, w jaki sposób program jest przesyłany podczas wywoływania skryptu na różne sposoby.

NOTATKA: Tworzenie skryptu z rozszerzeniem nie ma znaczenia. Skrypt będzie działał w porządku nawet bez rozszerzeń.

Zasadniczo każdy skrypt zaczyna się od linii zwanej szulernia(#!). Haszysz Symbol w Bash będzie interpretowany jako komentarze, ale szulernia ma szczególne znaczenie. Każe Bashowi przesłać program w dowolnym tłumaczu, o którym wspomniałeś szulernia.

Poniżej znajduje się przykładowy program i określam Bash jako mojego interpretera.

$ cat >> hello_world.cii #!/usr/bin/env bash echo „hello świat” $ chmod +x hello_world.cii 

Teraz, aby uruchomić skrypt, możesz to zrobić na dwa sposoby.

  • Użyj względnej ścieżki, aby wywołać skrypt. Przejdź do katalogu, w którym skrypt jest obecny i uruchamiany ./Witaj świecie.cii.
  • Użyj bezwzględnej ścieżki, aby wywołać skrypt. Z dowolnego miejsca w systemie plików Wpisz pełną ścieżkę do skryptu.
$ ./Witaj świecie.sh $ pwd $/home/karthick/hello_world 
Uruchom skrypt powłoki

Teraz zobaczmy, co się stanie, gdy spróbujesz przesłać swój program bez szulernia. Przy braku szulernia, Program zostanie przesłany do dowolnej bieżącej powłoki, z którą się uruchomisz, w moim przypadku jest Grzmotnąć (/bin/bash).

Pozwól mi zademonstrować przykład. Tworzę skrypt Python bez szulernia A kiedy dzwonię do programu, grzmotnąć nie wie, że powinien przesłać ten program do interpretera Pythona zamiast tego uruchomi program w bieżącej powładzie.

$ cat> run-py.PY Echo $ Shell Print („Hello World”) $ chmod +x run-py.Py $ ./Run-py.py 
Niewłaściwy tłumacz w skrypcie

W takim przypadku możesz zadzwonić do programu, wspominając o tym, do którego tłumacza powinien być przesłany lub po prostu dodać szulernia linia, która jest zawsze zalecana.

# Który Python3 $ (który Python3)/Home/Karthick/Run_py.py 
Zadzwoń do skryptu z tłumaczem

Teraz, gdy wiesz, jak nazwać skrypt, następnym krokiem byłoby zrozumienie, co się stanie, gdy nazwiemy skrypt. Po wywołaniu skryptu, jak pokazano w powyższych przykładach, utworzy proces dziecięcy (rozwidlenie), a skrypt zostanie przesłany do procesu dziecka. Uruchomiłem przykładowy skrypt, który po prostu uruchomi następujące polecenie i pokazuje, że skrypt jest przesyłany do procesu dziecięcego.

$ ps -ef - -Forest | Grep -i Bash 
Rozwidlenie

Może istnieć wiele procesów dzieci w ramach skryptu, co zależy od naszego kodu. Należy zauważyć, że zmienne środowiskowe utworzone przez indeks dolny zostaną porzucone po zakończeniu. Proces potomny może uzyskać dostęp do zmiennych utworzonych przez proces nadrzędny, eksportując je. Ale proces nadrzędny nie może uzyskać dostępu do zmiennych utworzonych przez proces dziecka.

Spójrz na poniższe artykuły, aby zrozumieć, jak działają zmienne i jak eksportować zmienne.

  • Zrozumienie i pisanie „Zmienne Linux” w skonstrukcji
  • Naucz się różnicy między $$ a $ bashpid w Bash

Pozyskiwanie skryptu

"Źródło”To wbudowane polecenie powłoki, które odczytuje plik przekazany jako argument i uruchamia kod w bieżącym środowisku powłoki. Odpowiednim przypadkiem użycia, którego używasz głównie, jest modyfikowanie konfiguracji .Bashrc Lub .bash_profile i przeładowanie zmian za pomocą Polecenie źródłowe.

$ type -a Źródło 
Polecenie wbudowanej powłoki

Istnieją dwa syntaktyczne sposoby uruchomienia Polecenie źródłowe. Możesz wybrać każdego z dwóch składni i jest to osobisty wybór.

$ Source File_name [argumenty] $ . Nazwa_pliku [argumenty] 

Pozwól mi pokazać, jak faktycznie działa źródło. Zamierzam stworzyć dwa scenariusze powłoki. Pierwszy skrypt (Moduł.cii) będzie pomieścić niektóre zmienne i funkcje. Drugi skrypt (Główny.cii) wydrukuje zmienną i wywoła funkcję.

Plik Moduł.cii.

#!/usr/bin/env bash var1 = $ (echo "Welcome to 1 $") funkcja f1 () echo „Funkcja F1 jest wywoływana” 

Plik Główny.cii.

#!/usr/bin/env bash echo $ var1 f1 
Przykładowe kody skryptów

Ustaw uprawnienie do wykonania na skrypt i wywołaj główny skrypt "główny.cii". Teraz ten skrypt spróbuje znaleźć funkcję f1 i zmienne Var1 w bieżącym środowisku powłoki i zawiedzie z nie znalezionym poleceniem.

$ Bash Main.cii 
Przed pozyskaniem skryptu

Teraz uruchommy polecenie źródła wewnątrz skryptu, które załaduje zmienną i funkcje do bieżącego środowiska powłoki i które będą dostępne przez "główny.cii".

Plik Moduł.cii.

#!/usr/bin/env bash var1 = $ (echo "Welcome to 1 $") funkcja f1 () echo "Funkcja F1 nazywana jest" 

Plik Główny.cii.

#!/USR/BIN/ENV BASH BASH SUPER.sh tecmint echo $ var1 f1 
Przykładowe kody skryptów z pozyskiwaniem

Teraz uruchom skrypt ponownie i zobacz.

$ Bash Main.cii 
Po pozyskaniu skryptu

źródło jest bardzo przydatny w grzmotnąć Aby zastosować się do modułowego podejścia do programowania przy tworzeniu naszych scenariuszy Shell. Możemy podzielić nasz kod na mniejsze moduły i możemy być używane w wielu programach. W ten sposób możemy śledzić SUCHY (Nie powtarzaj się) zasada.

To wszystko dla tego artykułu. Krótko omówiliśmy różnicę między pozyskiwaniem a rozwidleniem w Bash. Przejrzyj artykuł i podziel się z nami swoją cenną opinią.