Jak używać heredoc w skonstrukcji
- 3358
- 916
- Natan Cholewa
Tutaj dokument (Heredoc) to literał wejściowy lub plików, który jest traktowany jako specjalny blok kodu. Ten blok kodu zostanie przekazany do polecenia w celu przetworzenia. Heredoc pochodzi UNIX Skorupy i można je znaleźć w popularnych pociskach Linux, takich jak SH, TCSH, KSH, BASH, ZSH, CSH. W szczególności inne języki programowania, takie jak Perl, Ruby, PHP, również obsługują Heredoc.
Struktura Herdoc
Heredoc używa 2 nawiasów kątowych (<<)
a następnie Token ogranicznika. Ten sam token ogranicznika zostanie użyty do zakończenia bloku kodu. Cokolwiek pojawia się w ograniczniku, jest uważane za blok kodu.
Spójrz na poniższy przykład. Przekieruję blok kodu do polecenia CAT. Tutaj ogranicza się „BLOK”I zakończone przez to samo„BLOK".
kot << BLOK Hello World Data Data to $ (data +%f) mój katalog domowy = $ home BLOK
NOTATKA: Powinieneś użyć tego samego tokena delimiter, aby uruchomić blok i zakończyć blok.
Utwórz komentarze multiline
Jeśli kodujesz teraz w Bash, możesz wiedzieć, że Bash domyślnie nie obsługuje komentarzy wielopoziomowych C Lub Jawa. Możesz użyć Heredoc Aby to pokonać.
To nie jest wbudowana funkcja BASH wspierająca komentarz wieloletnich, ale tylko hack. Jeśli nie przekierowujesz heredoc Do dowolnego polecenia interpreter po prostu odczytuje blok kodu i niczego nie wykona.
<< KOMENTARZ To jest wiersz komentarza 1 To jest wiersz komentarza 2 To jest wiersz komentarza 3 KOMENTARZKomentarze multiline
Obsługa białych przestrzeni
Domyślnie, heredoc nie tłumi żadnych postaci białej przestrzeni (zakładki, przestrzenie). Możemy zastąpić to zachowanie, dodając kropla (-)
Po (<<)
a następnie ogranicznik. To tłumi wszystkie przestrzenie TAB, ale białe przestrzenie nie zostaną tłumione.
kot <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCKObsługa przestrzeni
Zmienna i zastępstwo poleceń
Heredoc akceptuje zmienne podstawienie. Zmienne mogą być zmiennymi zdefiniowanymi przez użytkownika lub zmiennymi środowiskowymi.
Dziś = $ (data +%f) cat << BLOCK1 # User defined variables Today date is = $TODAY #Environ Variables I am running as = $USER My home dir is = $HOME I am using $SHELL as my shell BLOCK1
Podobnie możesz uruchomić dowolne polecenia wewnątrz heredoc blok kodu.
kot << BLOCK2 $(uname -a) BLOCK2Zmienna i zastąpienie dowodzenia
Uciekając z postaciami specjalnymi
Istnieje kilka sposobów uniknięcia postaci specjalnych. Albo możesz to zrobić na poziomie znaku lub poziom.
Aby uniknąć poszczególnych znaków specjalnych, użyj ukośnik wsteczny (\).
kot << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5
Aby uciec od wszystkich znaków specjalnych w bloku, otaczają ograniczenie pojedynczymi cytatami, podwójnymi cytatami lub przedrostkiem z odwrotną.
kot << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3Uciekając z postaciami specjalnymi
Teraz, gdy znamy strukturę heredoc I jak to działa, zobaczmy kilka przykładów. Dwa wspólne obszary, w których używam heredoc uruchamiają blok poleceń nad SSH i przekazuje zapytania SQL heredoc.
W poniższym przykładzie staramy się wykonać blok kodu na zdalnym serwerze za pośrednictwem SSH.
Uruchamianie poleceń nad SSHW poniższym przykładzie mijam wybierać oświadczenie do PSQL Aby połączyć się z bazą danych i uruchomić zapytanie. To alternatywny sposób na uruchomienie zapytania PSQL wewnętrzny skrypt bash zamiast używać -F
flaga do biegania .SQL plik.
#!/usr/bin/env bash uname = postgres dbname = testowanie psql --username = $ uname - -password - -dbname = $ dbname << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCKUruchamianie zapytania SQL
To wszystko dla tego artykułu. Jest o wiele więcej, co możesz zrobić heredoc w porównaniu z tym, co pokazaliśmy w przykładach. Jeśli masz użyteczny hack z heredoc Opublikuj to w sekcji komentarzy, aby nasi czytelnicy mogli z tego skorzystać.
- « Jak zainstalować Terraform w rozkładach Linux
- Jak zainstalować stacja robocza szefa kuchni w Rhel i Centos 8/7 »