Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- 2745
- 108
- Laura Zygmunt
Kontynuując naszą serię na temat przydatnych wskazówek i wskazówek poleceń Bash, w dzisiejszym artykule zbadamy Greppping tylko to, czego potrzebujesz, i rozpocząć od podkładu PWD
i jak odkryć ścieżkę, od której zaczął skrypt.
W tym samouczku się nauczysz:
- Przydatne wskazówki, sztuczki i metody
- Jak wchodzić w interakcje z wierszem poleceń bash w zaawansowany sposób
- Jak ogólnie wyostrzyć swoje umiejętności i stać się bardziej biegły użytkownik Bash
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 |
Przykład 1: Directory robocze ścieżki? Albo nie?
Możemy być przyzwyczajeni do dzwonienia PWD
w wierszu poleceń, aby powiedzieć nam nazwę naszego bieżącego katalogu:
$ PWD/Home/Roel/Workspace
Ale jeśli chcemy uzyskać katalog, od którego rozpoczął się skrypt, użycie tej zmiennej ze skryptu również działa w ten sam sposób?
$ cat test_pwd.cii #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2"
Kopiuj Użyjemy dwóch sposobów na odzyskanie ścieżki: Poszukujemy (dla pierwszego My_path1
przypisanie) w PWD
(Poziom systemu operacyjnego) Automatycznie zmienna-prezentowa i w drugim przypadku (dla drugiego My_path2
przypisanie) Wykonujemy PWD
w subshellowie ($ (…)
) i przypisz to do My_path2
. Wykonajmy to samo:
$ ./test_pwd.SH/Home/Roel/Workspace/Home/Roel/Workspace
Wygląda dobrze, prawda? Tak, być może, ale kiedy zmienimy się w inny katalog i wywołujemy skrypt za pomocą jego pełnej lub względnej nazwy ścieżki, PWD
zmienna (lub PWD
polecenie) Wewnątrz skryptu zwróci katalog, w którym byliśmy, kiedy rozpoczęto skrypt. Sprawdźmy to:
$ Mkdir Test $ CD Test $… /test_pwd.SH/Home/Roel/Workspace/Test/Home/Roel/Workspace/Test
To, co możemy tutaj zobaczyć, to to PWD
(albo $ Pwd
zmienna) zawsze zwraca rzeczywistą bieżącą ścieżkę.
Może to być problem: możemy chcieć uruchomić indeks dolny lub uzyskać dostęp do pliku z tego samego katalogu (lub jego podwodnego), jak ten, w którym był skrypt. Często dzieje się tak w przypadku bardziej złożonych skryptów bash, które wywołują wiele dolnych indeksu i/lub plików danych i konfiguracji.
Więc jaki jest jednolity sposób na uzyskanie ścieżka, od której rozpoczął się skrypt?
Można rozważyć użycie dirname "\ $ 0"
Komenda:
$ CAT TEST2.cii #!/bin/bash echo "\ $ 0" dirname "\ $ 0"
Kopiuj Dirname dostarczy - nazwa katalogu relatywnego dowolnej opcji przekazanej na nią, aw tym przypadku jest to \ 0 $
- Specjalna zmienna, która jest ustawiona, gdy skrypt zaczyna nazwa skryptu podczas uruchamiania. Przetestujmy to:
$ ./test2.cii ./test2.cii . $ CD Test $… /test2.sh… /test2.cii…
Lepiej, jak sądzę, i może to trochę pomóc (przede wszystkim uzyskać pomysł), ale nadal nie daje nam w pełni wykwalifikowanej nazwy ścieżki. W tym celu możemy użyć opakowania podwójnego Dirname
w połączeniu z faktyczną pełną wykwalifikowaną ścieżką uzyskaną z PWD
wykonanie:
$ cat Make_IT_Work.cii #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path"
Kopiuj Zobaczmy, czy to działa:
$ ./make_it_work.SH/Home/Roel/Workspace
Jak dotąd tak dobrze, ale czy to działa, gdy uruchamiasz go z podkładu?
$ CD Test && pwd/home/roel/workspace/test $…/make_it_work.SH/HOME/Roel/Workspace $/home/roel/Workspace/Make_IT_Work.SH/Home/Roel/Workspace
Tak!
Najpierw zmieniamy się w test
i sprawdź, czy jesteśmy w test
katalog, jeśli ten katalog zmian (płyta CD
) Dowództwo zakończyło się sukcesem (zgodnie z instrukcją &&
).
W obu przypadkach - czy jest to wywoływane w sposób względny (… /
) lub z w pełni wykwalifikowaną nazwą ścieżki (/Home/Roel/Workspace/
), W rezultacie widzimy katalog, od którego rozpoczął się skrypt (/Home/Roel/Workspace/
), a nie rzeczywisty obecny katalog roboczy lub PWD (/Home/Roel/Workspace/Test
).
Podsumowując, możesz użyć My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)"
Skrypt jednolinowy w celu uzyskania prawidłowej, w pełni wykwalifikowanej nazwy katalogu z twoich skryptów. Po tym użycie względnego dodatku będzie dobrze działać. Na przykład możesz użyć $ My_path/include/mysubScript.cii
i nawet $ My_path /… /one_dir_up_file.tekst
itp.
Przykład 2: Greppping tylko to, czego potrzebujesz
Czy kiedykolwiek używałeś Grep
? GREP to wszechstronne narzędzie wiersza poleceń Bash, które pozwala łatwo wybrać tekst z pliku. Przez większość czasu jest używany w następujący sposób:
$ CAT Test Linia 1 moja linia 2 linia linia 3 Nasza linia $ grep „linia 2” linia 2 twoje linie
Mamy plik wejściowy z 3 wierszami i szukamy konkretnego testu (linia 2
) W tym pliku. Ale co powiesz na to, że chcesz tylko linii, które mają wielokrotność linia
(I.mi. linie
) Wspomniany w nich? A co powiesz na to, że chciałbyś mieć tylko to słowo przed nim linie
kawałek, ale nie rzeczywisty Linia x
wyjście?
W takim przypadku możemy GREP tylko za to, czego potrzebujemy -o
(„tylko”) opcja do GREP:
$ grep -o „linie” linie testowe $ grep -o '\ w \+ linie „testuj swoje linie
Bingo! Najpierw zgarnęliśmy tylko słowo „linie”, które zostało znalezione. Następnie poprzedziliśmy to przestrzenią i wyrażeniem regularnym, które stwierdza się w pseudo-teście: Znajdź granicę słów (\ w
), przynajmniej raz i tyle razy, ile dotyczy (\+
), a następnie przestrzeń. Rezultat jest taki twój
(który ma dwa granice słów; początek i koniec). linia 2
nie jest zawarty. Chociaż ma granice słów, nie ma sufiks linie
do tego.
Jeśli chcesz dowiedzieć się więcej o wyrażeniach regularnych w BASH, zobacz Bash Regexps dla początkujących z przykładami, zaawansowaną regex Bash z przykładami, a możesz również polubił wyrażenia regularne Python z przykładami z przykładami.
Wniosek
W tym artykule zbadaliśmy PWD
i spojrzał na to, jak używać PWD
z wewnątrz skryptu w połączeniu z Dirname
Aby odzyskać w pełni wykwalifikowaną ścieżkę katalogu, od której rozpoczął się skrypt, w sposób, który zawsze będzie działał. Patrzyliśmy również na Greppping tylko to, czego potrzebujemy -o
opcja i, w tym przypadku, wyrażenie regularne w celu dopasowania granic słów.
Zostaw nam komentarz z najlepszymi wskazówkami i wskazówkami dotyczącymi wiersza poleceń Bash!
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 4
- Przydatne przykłady i sztuczki
Powiązane samouczki Linux:
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Mastering Bash Script Loops
- Przydatne przykłady i sztuczki
- Przydatne przykłady i sztuczki
- Przydatne przykłady i wskazówki dotyczące linii poleceń Bash - część 2
- Rzeczy do zainstalowania na Ubuntu 20.04
- Zagnieżdżone pętle w skryptach Bash
- Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
- Przydatne przykłady i sztuczki
- Ubuntu 20.04 Przewodnik