Cara Menggunakan Heredoc Dalam Skrip Shell
- 3944
- 702
- Marcus Kassulke
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 KomenKomen 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. BLOCKPengendalian 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) BLOCK2Pemboleh 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 BLOCK3Melarikan 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 SSHDalam 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; BLOCKRunning 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.
- « Cara Memasang Terraform dalam Pengagihan Linux
- Cara memasang stesen kerja chef di rhel dan centos 8/7 »