Jak odkryć, od wewnętrznego skryptu bash, ścieżka, w której znajduje się skrypt

Jak odkryć, od wewnętrznego skryptu bash, ścieżka, w której znajduje się skrypt

Kiedy opracowujesz złożone skrypty bash i zaczynasz umieszczać różne skrypty do folderu, w którym jeden skrypt oddziałuje na przykład z innym przez, począwszy od tego, szybko staje się konieczne, aby wiemy, że ścieżka, od której rozpoczął się skrypt, abyśmy mogli zacząć inne skrypty z w pełni wykwalifikowaną nazwą ścieżki. Jest to ważne, ponieważ pierwszy skrypt mógł zostać uruchomiony spoza katalogu scenariusza. Moglibyśmy to również zrobić za pomocą względnej ścieżki, więc nawet - w jakiś sposób - czytanie polecenia, które rozpoczęło obecny skrypt, nie zadziała.

W tym samouczku nauczysz się:

  • Co PWD polecenie jest i to, co robi
  • Jak odkryć z wewnętrznego skryptu bash, w jakiej ścieżce jest ten sam skrypt
Jak odkryć, od wewnętrznego skryptu bash, ścieżka, w której znajduje się skrypt

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu Linuksa
Oprogramowanie Wiersz poleceń Bash, system oparty na Linuksie
Inny Wszelkie narzędzie, które nie jest zawarte w skorupce Bash domyślnie można zainstalować za pomocą za pomocą sudo apt-get instal instal narzędzie (Lub Mnij instalacja dla systemów opartych na Redhat)
Konwencje # - Wymaga wykonywania Linux -Commands z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-Wymaga wykonania Linux-commands jako zwykłego niepewnego użytkownika

Co to jest PWD?

PWD polecenie w Linux zwraca Director Working Directory Po wykonaniu. Niezależnie od ścieżki, w której się obecnie znajdujemy, i wcześniej nawigowaliśmy (lub zostaliśmy umieszczone w naszym systemie operacyjnym, jak na przykład, kiedy otwieramy wiersz polecenia/terminal), będzie to, co jest powrót, gdy wykonamy wykonanie PWD.

$ cd / $ pwd / $ cd / home $ pwd / home 


Tutaj zmieniliśmy się na katalog główny (/) i wykonane PWD. Naszą obecną ścieżką był katalog główny, więc / jest zwrócony. Następnie zmieniliśmy na /dom katalog i wykonano PWD Ponownie. Powrót ścieżki jest teraz /dom.

Wewnątrz skryptu Bash, PWD polecenie będzie działać w ten sam sposób. Warto również wiedzieć, że w ramach skryptu Bash (i na wierszu poleceń poza skryptem Bash) możemy użyć specjalnej zmiennej systemu operacyjnego $ Pwd który będzie automatycznie aktualny przez system operacyjny, aby zawierać naszą bieżącą ścieżkę. To oszczędza nas przed zrobieniem czegoś takiego jak nazwanie subshella, ja.mi. MyPath = "$ (PWD)" nie jest potrzebne, możemy po prostu wywołać $ Pwd zmienny.

Więc możemy użyć PWD, prawda?

Nie dokładnie. Wyobraź sobie następującą sytuację:

$ touch 'myPath.sh '$ echo'#!/bin/bash '>> mypath.sh $ echo 'echo $ pwd' >> mypath.sh $ chmod +x mypath.cii 

Tutaj zdefiniowaliśmy skrypt o nazwie moja ścieżka.cii i sprawił, że był wykonywalny. Następnie podskakujemy z jednego katalogu z naszego katalogu domowego i wykonujemy nasz skrypt:

$ pwd /home /roel $ cd… $ ./Roel/MyPath.SH /HOME 

Natomiast PWD polecenie wewnątrz naszego moja ścieżka.cii Skrypt działa poprawnie, jest tutaj problem: PWD zwróciło ścieżkę, w której się obecnie znajdujemy, a mianowicie /dom podczas gdy skrypt jest faktycznie przechowywany w /Home/Roel informator!

Pamiętaj o tytule artykułu; Szukamy ścieżki, w której skrypt jest przechowywany! Jak więc możemy to znaleźć?

Metoda!

Podczas gdy nie ma specjalnej zmiennej w BASH, aby pokryć ścieżkę, w której skrypt jest przechowywany, istnieje prosta metoda, aby ją uzyskać.

$ cd - /home /roel $ touch 'mypath2.sh '$ echo'#!/bin/bash '>> myPath2.sh $ echo 'myPath = "$ (cd" $ (dirname \ $ 0) "&& pwd)"' >> myPath2.sh $ echo 'echo "$ myPath"' >> myPath2.sh $ chmod +x mypath2.cii 


Tutaj zdefiniowaliśmy wtórny skrypt nazwany MyPath2.cii. W nim umieszczamy mały specjalny kod ($ (cd "$ (dirname \ $ 0)"; && pwd)), która znajdzie ścieżkę, w której znajduje się skrypt (zmieniając się w katalog, na podstawie \ 0 $ zmienna (która jest nazwa skryptu w sposób, w jaki ją nazywaliśmy, ja.mi. używając potencjalnej ścieżki względnej lub w pełni wykwalifikowanej) i żądanie nazwy dirname (przez odniesienie, i zauważ, że nadal może być ścieżką względną, jeśli skrypt zaczął za pomocą ścieżki względnej), a następnie zmieniać się (przez nią przez płyta CD), a następnie żądanie PWD (Director Working Directory), dając nam w pełni wykwalifikowaną ścieżkę.

Zobaczmy, czy działa to poprawnie niż tylko używanie PWD:

$ cd… $ pwd /home $ ./Home/MyPath2.SH /HOME /ROEL 

Skrypt działa poprawnie, a mimo to MyPath2.cii był stosunkowo nazywany spoza katalogu, w którym skrypt przebywa, dane wyjściowe poprawnie odzwierciedlało poszukiwane informacje; ścieżka, w której istnieje skrypt. Przechowyliśmy to samo w $ MyPath zmienna, a ta zmienna może być teraz użyta do na przykład wywołania $ MyPath/someTherscript.cii Gdzie SomeTherscript.cii to kolejny skrypt w tym samym katalogu co MyPath2.cii

Wniosek

W tym artykule najpierw patrzymy PWD i czy to problem, w którym będzie to problem, znalezienie ścieżki, na której mieszka nasz skrypt, przez cały czas. Mając na uwadze, że PWD może działać, jeśli nie zmieniliśmy katalogów, nie będzie to działać poprawnie, jeśli będziemy poza ścieżką, w której znajduje się skrypt. Następnie wprowadziliśmy mały kawałek kodu (MyPath = "$ (cd" $ (dirname \ $ 0) "&& pwd)" które zawsze zwracają katalog nasz skrypt jest poprawnie.

Niewielki kawałek kodu, ale duże rozwiązanie dla naszego problemu z kodowaniem skryptów Bash! Cieszyć się!

Powiązane samouczki Linux:

  • Folder zip w Linux
  • Jak przesuwać folder na Linux
  • Jak sprawdzić użycie dysku przez folder w Linux
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Jak tworzyć skompresowane archiwa szyfrowane za pomocą TAR i GPG
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Hung Linux System? Jak uciec do wiersza poleceń i…
  • Mastering Bash Script Loops
  • Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4