Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Daftar Isi:

Anonim

Saat menulis skrip shell, Anda mungkin berada dalam situasi di mana Anda harus meneruskan blok teks atau kode multiline ke perintah interaktif, seperti tee , cat , atau sftp .

Di Bash dan shell lain seperti Zsh, dokumen Here (Heredoc) adalah jenis pengalihan yang memungkinkan Anda untuk melewati beberapa baris input ke sebuah perintah.

Sintaks penulisan HereDoc mengambil bentuk berikut:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Baris pertama dimulai dengan perintah opsional diikuti oleh operator pengalihan khusus << dan pengidentifikasi pembatas.
    • Anda dapat menggunakan string apa pun sebagai pengidentifikasi pembatas, yang paling umum digunakan adalah EOF atau END. Jika pengidentifikasi pembatas tidak dikutip, shell akan mengganti semua variabel, perintah dan karakter khusus sebelum meneruskan baris dokumen di sini ke perintah. tanda minus ke operator redirection <<- , akan menyebabkan semua karakter tab utama diabaikan. Ini memungkinkan Anda untuk menggunakan indentasi saat menulis di sini-dokumen dalam skrip shell. Karakter spasi putih terkemuka tidak diizinkan, hanya tab.
    Blok dokumen di sini dapat berisi string, variabel, perintah, dan jenis input lainnya. Baris terakhir diakhiri dengan pengidentifikasi pembatas. Ruang putih di depan pembatas tidak diperbolehkan.

Contoh Dasar Heredoc

Pada bagian ini, kita akan melihat beberapa contoh dasar bagaimana menggunakan heredoc.

Heredoc paling sering digunakan dalam kombinasi dengan perintah cat.

Dalam contoh berikut, kami melewati dua baris teks yang berisi variabel lingkungan dan perintah untuk menggunakan dokumen di sini.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

Seperti yang Anda lihat dari output di bawah ini, variabel dan output perintah diganti:

The current working directory is: /home/linuxize You are logged in as: linuxize

Mari kita lihat apa yang akan terjadi jika kita menyertakan pembatas dalam tanda kutip tunggal atau ganda.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

Anda dapat melihat bahwa ketika pembatas dikutip tidak ada ekspansi parameter dan substitusi perintah dilakukan oleh shell.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

Alih-alih menampilkan output di layar, Anda dapat mengarahkannya ke file menggunakan operator > , >> .

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

Jika file.txt tidak ada, itu akan dibuat. Saat menggunakan > file akan ditimpa, sedangkan >> akan menambahkan output ke file.

Input heredoc juga dapat disalurkan. Dalam contoh berikut ini perintah sed akan mengganti semua instance dari karakter l dengan e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

Untuk menulis data yang disalurkan ke file:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

Menggunakan Heredoc dengan SSH

Menggunakan Heredoc adalah salah satu cara paling mudah dan termudah untuk menjalankan banyak perintah pada sistem jarak jauh melalui SSH.

Saat menggunakan pembatas tanpa tanda kutip, pastikan Anda lolos dari semua variabel, perintah, dan karakter khusus jika tidak mereka akan diinterpolasi secara lokal:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

Anda mungkin juga ingin mengatur otentikasi berbasis kunci SSH dan terhubung ke server Linux Anda tanpa memasukkan kata sandi.

Kesimpulan

Dalam panduan ini, Anda telah mempelajari apa itu heredoc dan bagaimana menggunakannya dalam skrip shell Anda.

terminal bash