Jak odkryć, od wewnętrznego skryptu bash, ścieżka, w której znajduje się skrypt
- 2932
- 5
- Pan Jeremiasz Więcek
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
Zastosowane wymagania i konwencje oprogramowania
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