Jak używać heredoc w skonstrukcji

Jak używać heredoc w skonstrukcji

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 KOMENTARZ 
Komentarze 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. BLOCK 
Obsł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) BLOCK2 
Zmienna 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 BLOCK3 
Uciekają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 SSH

W 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; BLOCK 
Uruchamianie 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ć.