Cara Menggunakan Heredoc Dalam Skrip Shell

Cara Menggunakan Heredoc Dalam Skrip Shell

Di sini dokumen (Heredoc) adalah input atau aliran fail literal yang dianggap sebagai blok khas kod. Blok kod ini akan diserahkan kepada arahan untuk diproses. Heredoc berasal dari Unix Kerang dan boleh didapati dalam cengkerang Linux yang popular seperti SH, TCSH, KSH, BASH, ZSH, CSH. Terutama, bahasa pengaturcaraan lain seperti Perl, Ruby, PHP juga menyokong Heredoc.

Struktur Herdoc

Heredoc Menggunakan kurungan sudut 2 (<<) diikuti oleh a Token Delimiter. Token pemisah yang sama akan digunakan untuk menamatkan blok kod. Apa sahaja yang terdapat di dalam pembatas dianggap sebagai blok kod.

Lihat contoh di bawah. Saya mengalihkan blok kod ke arahan kucing. Di sini pembatas ditetapkan untuk "Blok"Dan ditamatkan dengan yang sama"Blok".

kucing << Blok Hello World Today Tarikh adalah $ (tarikh +%f) direktori rumah saya = $ home Blok 

CATATAN: Anda harus menggunakan token pemecah yang sama untuk memulakan blok dan menamatkan blok.

Buat komen multiline

Sekiranya anda sedang mengekodkan masa sekarang, anda mungkin tahu bash secara lalai tidak menyokong komen multiline seperti C atau Java. Anda boleh menggunakan Heredoc untuk mengatasinya.

Ini bukan ciri terbina dalam Bash yang menyokong komen berbilang baris, tetapi hanya hack. Sekiranya anda tidak mengalihkan Heredoc Kepada mana -mana arahan, jurubahasa hanya akan membaca blok kod dan tidak akan melaksanakan apa -apa.

<< Komen Ini adalah baris komen 1 Ini adalah baris komen 2 Ini adalah baris komen 3 Komen 
Komen Multiline

Mengendalikan ruang putih

Secara lalai, Heredoc tidak akan menindas watak ruang putih (tab, ruang). Kita boleh mengatasi tingkah laku ini dengan menambahkan Dash (-) selepas (<<) diikuti oleh pembatas. Ini akan menindas semua ruang tab tetapi ruang putih tidak akan ditindas.

kucing <<- 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 
Pengendalian ruang

Pemboleh ubah dan perintah penggantian

Heredoc menerima penggantian berubah -ubah. Pembolehubah boleh menjadi pemboleh ubah yang ditentukan pengguna atau pembolehubah persekitaran.

Hari ini = $ (tarikh +%f) kucing << 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 

Begitu juga, anda boleh menjalankan arahan di dalam Heredoc blok kod.

kucing << BLOCK2 $(uname -a) BLOCK2 
Pemboleh ubah dan penggantian arahan

Melarikan diri watak khas

Terdapat beberapa cara kita dapat melarikan diri dari watak khas. Sama ada anda boleh melakukannya di peringkat watak atau tahap DOC.

Untuk melarikan diri dari watak khas individu menggunakan a backslash (\).

kucing << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5 

Untuk melarikan diri dari semua watak khas di dalam blok mengelilingi pembatas dengan petikan tunggal, petikan berganda, atau awalan pembatas dengan backslash.

kucing << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3 
Melarikan diri watak khas

Sekarang kita tahu struktur Heredoc Dan bagaimana ia berfungsi, mari kita lihat beberapa contoh. Dua kawasan biasa di mana saya menggunakan Heredoc menjalankan blok arahan ke atas SSH dan lulus pertanyaan SQL melalui Heredoc.

Dalam contoh di bawah, kami cuba melaksanakan blok kod di pelayan jauh melalui SSH.

Perintah berlari ke atas SSH

Dalam contoh di bawah saya lulus a pilih penyata kepada PSQL Untuk menyambung ke pangkalan data dan jalankan pertanyaan. Ini adalah cara alternatif untuk menjalankan pertanyaan di PSQL di dalam skrip bash dan bukannya menggunakan -f Bendera untuk dijalankan .SQL fail.

#!/usr/bin/env bash uname = postgres dbName = testing psql --username = $ uname --password --dbname = $ dbName << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK 
Running SQL Query

Itu sahaja untuk artikel ini. Terdapat banyak lagi yang boleh anda lakukan Heredoc berbanding dengan apa yang telah kita tunjukkan dalam contoh. Sekiranya anda mempunyai hack berguna dengan Heredoc Sila hantar di bahagian komen supaya pembaca kami dapat mendapat manfaat daripada itu.