Cara Menggunakan "Dokumen Di Sini" di Bash di Linux
Diterbitkan: 2022-01-29Anehnya bernama "di sini dokumen" memungkinkan Anda menggunakan pengalihan input/out di dalam skrip Bash di Linux. Mereka adalah cara yang bagus untuk mengotomatisasi perintah yang Anda perlukan untuk dijalankan di komputer jarak jauh.
Berikut Dokumen
Banyak perintah di Linux memiliki dua atau tiga nama huruf. Ini sebagian yang memunculkan anggapan bahwa Linux sulit dipelajari dan penuh dengan perintah misterius. Tapi salah satu nama teraneh di Linux bukanlah salah satu yang samar-samar. "Dokumen di sini" bukanlah dokumen, dan juga tidak terlalu jelas apa yang dimaksud dengan "di sini".
Mereka adalah konstruksi yang relatif tidak jelas, tetapi mereka berguna. Tentu saja, ini Linux, jadi ada lebih dari satu cara untuk menguliti kucing. Beberapa fungsi yang disediakan oleh dokumen di sini dapat direproduksi dengan cara lain. Metode alternatif tersebut biasanya lebih rumit. Dalam pemrograman dan skrip, "lebih rumit" juga berarti "lebih rentan terhadap bug," dan kode Anda lebih sulit untuk dipelihara.
Di mana di sini dokumen yang benar-benar unggul adalah dalam otomatisasi perintah yang ingin Anda kirim ke komputer jarak jauh dari koneksi yang dibuat dari dalam skrip. Membuat koneksi itu mudah, tetapi setelah koneksi dibuat, bagaimana Anda "memompa" perintah Anda dari skrip Anda ke shell di komputer jarak jauh? Di sini dokumen memungkinkan Anda melakukannya dengan sangat sederhana.
Prinsip Dasar Dokumen Here
Representasi idiomatik dari dokumen di sini terlihat seperti ini:
PERINTAH << batas_string . . teks data variabel . . batas_string
- COMMAND : Ini bisa berupa perintah Linux apa pun yang menerima input yang dialihkan. Catatan, perintah
echo
tidak menerima input yang dialihkan. Jika Anda perlu menulis ke layar, Anda dapat menggunakan perintahcat
. - << : Operator pengalihan.
- limit_string : Ini adalah label. Itu bisa apa saja yang Anda suka selama itu tidak muncul dalam daftar data yang Anda arahkan ke perintah. Digunakan untuk menandai akhir dari teks, data, dan daftar variabel.
- Data List : Daftar data yang akan dimasukkan ke perintah. Itu bisa berisi perintah, teks, dan variabel. Isi dari daftar data dimasukkan ke dalam perintah satu baris pada satu waktu sampai _limit_string ditemukan.
Anda mungkin akan melihat contoh dokumen di sini yang menggunakan "EOF" sebagai string batas. Kami tidak mendukung pendekatan itu. Ini berfungsi, tetapi "EOF" berarti "Akhir File." Terlepas dari kasus yang jarang terjadi di mana dokumen rumah adalah hal terakhir dalam file skrip, "EOF" digunakan secara keliru.
Ini akan membuat skrip Anda lebih mudah dibaca jika Anda menggunakan string batas yang mengacu pada apa yang Anda lakukan. Jika Anda mengirim serangkaian perintah ke komputer jarak jauh melalui Secure Shell (SSH), string batas yang disebut sesuatu seperti “_remote_commands” akan sangat masuk akal. Anda tidak perlu memulainya dengan karakter garis bawah “ _
”. Kami melakukannya karena itu menandai mereka sebagai sesuatu yang tidak biasa dalam naskah Anda.
Contoh Sederhana
Anda dapat menggunakan dokumen di sini pada baris perintah dan dalam skrip. Saat Anda mengetik berikut ini di jendela terminal, Anda akan melihat prompt kelanjutan baris “ >
” setiap kali Anda menekan “Enter.” Saat Anda mengetik string batas “_end_of_text” dan menekan “Enter,” daftar situs web diteruskan ke cat,
dan mereka ditampilkan di jendela terminal.
kucing << _end_of_text Bagaimana-Untuk Geek Tinjau Geek LifeSavvy CloudSavvy IT PikiranBounce _end_of_text
Itu bukan latihan yang paling berharga, tetapi itu menunjukkan bahwa tidak ada yang dikirim ke perintah sampai seluruh daftar data dikumpulkan dan string batas ditemukan. Perintah cat
tidak menerima input apa pun sampai Anda memasukkan string batas “_end_of_text” dan menekan tombol “Enter”.
Kita dapat melakukan hal yang sama dalam sebuah skrip. Ketik atau salin contoh ini ke editor, simpan file sebagai "heredoc-1.sh", dan tutup editor.
#!/bin/bash kucing << "_akhir_teks_" Nama pengguna Anda adalah: $(whoami) Direktori kerja Anda saat ini adalah: $PWD Versi Bash Anda adalah: $BASH_VERSION _end_of_text
Saat Anda mengikuti artikel ini, setiap kali Anda membuat skrip, Anda harus membuatnya dapat dieksekusi sebelum dijalankan. Dalam setiap kasus, gunakan perintah chmod
. Ganti nama skrip di setiap contoh untuk nama skrip yang digunakan di sini.
chmod +x heredoc-1.sh
Skrip ini berisi dua variabel lingkungan, $PWD
dan $BASH_VERSION
. Nama variabel lingkungan diganti dengan nilai datanya—direktori kerja saat ini dan versi Bash—saat skrip dijalankan.
Script juga menggunakan substitusi perintah pada perintah whoami
. Nama perintah diganti dengan outputnya sendiri. Output dari seluruh skrip ditulis ke jendela terminal dengan perintah cat. Kami menjalankan skrip dengan memanggilnya dengan nama:
./heredoc-1.sh
Jika Anda memodifikasi skrip dan membungkus string batas di baris pertama dokumen di sini dalam tanda kutip ” "
“, daftar data diteruskan ke perintah dokumen di sini kata demi kata. Nama variabel ditampilkan alih-alih nilai variabel, dan substitusi perintah akan tidak berlangsung.
#!/bin/bash cat <<- "_end_of_text" Nama pengguna Anda adalah: $(whoami) Direktori kerja Anda saat ini adalah: $PWD Versi Bash Anda adalah: $BASH_VERSION _end_of_text
./heredoc-1.sh
Menangani Karakter Tab
Secara default, karakter tab dalam daftar data Anda akan disimpan dan ditulis ke jendela terminal. Salin dan simpan contoh ini sebagai “heredoc-2.sh.” Jadikan itu dapat dieksekusi menggunakan perintah chmod
. Edit garis indentasi untuk memastikan bahwa mereka memiliki satu atau dua karakter tab di awal baris, bukan serangkaian spasi.
#!/bin/bash kucing << _end_of_text Nama pengguna Anda adalah: $(whoami) Direktori kerja Anda saat ini adalah: $PWD Versi Bash Anda adalah: $BASH_VERSION _end_of_text
./heredoc-2.sh
Tab ditulis ke jendela terminal.
Dengan menambahkan tanda hubung “ -
” ke operator pengalihan, dokumen di sini akan mengabaikan karakter tab di depan. Simpan contoh ini sebagai "heredoc-3.sh" dan buat itu bisa dieksekusi.
#!/bin/bash kucing <<- _end_of_text Nama pengguna Anda adalah: $(whoami) Direktori kerja Anda saat ini adalah: $PWD Versi Bash Anda adalah: $BASH_VERSION _end_of_text
./heredoc-3.sh
Tab diabaikan. Ini mungkin tampak sepele, tetapi ini adalah cara yang rapi untuk mengatasi tab awal karena bagian skrip yang menjorok.
Loop dan konstruksi logis lainnya biasanya menjorok. Jika dokumen Anda di sini terdapat di bagian skrip yang menjorok, menggunakan tanda hubung “ -
” dengan operator pengalihan akan menghapus masalah pemformatan yang disebabkan oleh karakter tab utama.
#!/bin/bash jika benar; kemudian kucing <<- _limit_string Baris 1 dengan tab terdepan. Baris 2 dengan tab terdepan. Baris 3 dengan tab terdepan. _batas_string fi
Mengarahkan ke File
Output dari perintah yang digunakan dengan dokumen di sini dapat diarahkan ke file. Gunakan “ >
” (buat file) atau “ >>
” (buat file jika tidak ada, tambahkan ke file jika ada) operator pengalihan setelah string batas di baris pertama dokumen di sini.
Skrip ini adalah "heredoc-4.sh." Ini akan mengarahkan outputnya ke file teks yang disebut "session.txt."
#!/bin/bash cat << _end_of_text > session.txt Nama pengguna Anda adalah: $(whoami) Direktori kerja Anda saat ini adalah: $PWD Versi Bash Anda adalah: $BASH_VERSION _end_of_text
./heredoc-4.sh
sesi kucing.text
Piping Output ke Perintah Lain
Output dari perintah yang digunakan dalam dokumen di sini dapat disalurkan sebagai input ke perintah lain. Gunakan pipa “ |
” operator setelah string batas di baris pertama dokumen di sini. Kami akan menyalurkan output dari perintah dokumen di sini, cat
, ke sed
. Kami ingin mengganti semua kemunculan huruf "a" dengan huruf "e".
Beri nama skrip ini "heredoc-5.sh."
#!/bin/bash cat << _end_of_text | sed 's/a/e/g' Bagaimana Ke gaak _end_of_text
./heredoc-5.sh
"Gaak" dikoreksi menjadi "Geek."
Mengirim Parameter ke Fungsi
Perintah yang digunakan dengan dokumen di sini dapat berupa fungsi dalam skrip.
Script ini melewatkan beberapa data kendaraan ke dalam sebuah fungsi. Fungsi membaca data seolah-olah telah diketik oleh pengguna. Nilai dari variabel tersebut kemudian dicetak. Simpan skrip ini sebagai "heredoc-6.sh".
#!/bin/bash # fungsi set_car_details() set_mobil_detail () { baca make membaca model baca baru_bekas baca delivery_collect baca lokasi baca harga } # Dokumen di sini yang meneruskan data ke set_car_details() set_car_details << _mars_rover_data NASA Penjelajah Ketekunan Digunakan Mengumpulkan Mars (panjang, lat) 77.451865,18.445161 2,2 miliar _mars_rover_data # Ambil detail kendaraan echo "Buat: $buat" echo "Model: $model" echo "Baru atau Bekas: $new_used" echo "Pengiriman atau Koleksi: $delivery_collect" echo "Lokasi: $lokasi" echo "Harga \$: $harga"
./heredoc-6.sh
Rincian kendaraan ditulis ke jendela terminal.
Membuat dan Mengirim Email
Kita dapat menggunakan dokumen di sini untuk menulis dan mengirim email. Perhatikan bahwa kita dapat meneruskan parameter ke perintah di depan operator pengalihan. Kami menggunakan perintah mail
Linux untuk mengirim email melalui sistem email lokal ke akun pengguna yang disebut "dave". Opsi -s
(subjek) memungkinkan kita untuk menentukan subjek email.
Contoh ini membentuk skrip "heredoc-7.sh."
#!/bin/bash artikel="Ini Dokumen" mail -s 'Status beban kerja' dave << _project_report Nama pengguna: $(whoami) Telah menyelesaikan tugas: Artikel: $artikel _laporan proyek
./heredoc-7.sh
Tidak ada output yang terlihat dari skrip ini. Tetapi ketika kami memeriksa surat kami, kami melihat bahwa email itu dibuat, dikirim, dan dikirim.
surat
Menggunakan Dokumen Di Sini dengan SSH
Di sini dokumen adalah cara yang ampuh dan nyaman untuk menjalankan beberapa perintah pada komputer jarak jauh setelah koneksi SSH dibuat. Jika Anda telah mengatur kunci SSH antara dua komputer, proses login akan sepenuhnya otomatis. Dalam contoh cepat dan kotor ini, Anda akan dimintai sandi untuk akun pengguna di komputer jarak jauh.
Skrip ini adalah "heredoc-8.sh". Kita akan terhubung ke komputer jarak jauh yang disebut "remote-pc". Akun pengguna disebut "dave". Kami menggunakan opsi -T
(nonaktifkan alokasi terminal semu) karena kami tidak memerlukan terminal semu interaktif untuk ditugaskan kepada kami.
Di bagian skrip "lakukan beberapa pekerjaan di sini", kita dapat melewati daftar perintah, dan ini akan dieksekusi di komputer jarak jauh. Tentu saja, Anda bisa memanggil skrip yang ada di komputer jarak jauh. Skrip jarak jauh dapat menampung semua perintah dan rutinitas yang ingin Anda jalankan.
Semua yang akan dilakukan skrip kita—heredoc-8.sh—adalah memperbarui log koneksi di komputer jarak jauh. Akun pengguna dan cap waktu dan tanggal dicatat ke file teks.
#!/bin/bash ssh -T [email protected] << _remote_commands # lakukan beberapa pekerjaan di sini # perbarui log koneksi echo $USER "-" $(tanggal) >> /home/dave/conn_log/script.log _remote_commands
Saat kami menjalankan perintah, kami dimintai kata sandi untuk akun di komputer jarak jauh .
./heredoc-8.sh
Beberapa informasi tentang komputer jarak jauh ditampilkan, dan kami kembali ke prompt perintah.
Di komputer jarak jauh , kita dapat menggunakan cat
untuk memeriksa log koneksi:
cat conn_log/script.log
Setiap koneksi terdaftar untuk kami.
TERKAIT: Cara Membuat dan Menginstal Kunci SSH Dari Shell Linux
Nama Aneh, Fitur Rapi
Di sini dokumen unik tetapi kuat, terutama ketika digunakan untuk mengirim perintah ke komputer jarak jauh. Ini akan menjadi masalah sederhana untuk membuat skrip rutinitas pencadangan menggunakan rsync
. Skrip kemudian dapat terhubung ke komputer jarak jauh, memeriksa ruang penyimpanan yang tersisa, dan mengirim email peringatan jika ruang hampir habis.
TERKAIT: Cara Mencadangkan Sistem Linux Anda Dengan rsync