GNU/Linux >> Belajar Linux >  >> Linux

Bash Heredoc

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

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

Sintaks penulisan HereDoc mengambil bentuk berikut:

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER
  • Baris pertama dimulai dengan perintah opsional diikuti oleh operator pengalihan khusus << dan pengenal pembatas.
    • Anda dapat menggunakan string apa pun sebagai pengenal pembatas, yang paling umum digunakan adalah EOF atau END.
    • Jika pengenal pembatas tidak diberi tanda kutip, shell akan mengganti semua variabel, perintah, dan karakter khusus sebelum meneruskan baris dokumen di sini ke perintah.
    • Menambahkan tanda minus ke operator pengalihan <<- , akan menyebabkan semua karakter tab utama diabaikan. Ini memungkinkan Anda untuk menggunakan lekukan saat menulis dokumen di sini dalam skrip shell. Karakter spasi putih utama tidak diperbolehkan, hanya tab.
  • Blok dokumen di sini dapat berisi string, variabel, perintah, dan jenis input lainnya.
  • Baris terakhir diakhiri dengan pengenal pembatas. Spasi putih di depan pembatas tidak diperbolehkan.

Contoh Dasar Heredoc #

Di bagian ini, kita akan melihat beberapa contoh dasar tentang cara menggunakan heredoc.

Heredoc paling sering digunakan dalam kombinasi dengan perintah cat.

Dalam contoh berikut, kita melewatkan dua baris teks yang berisi variabel lingkungan dan perintah ke cat 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, 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)

Jika Anda menggunakan heredoc di dalam pernyataan atau loop, gunakan <<- operasi pengalihan yang memungkinkan Anda untuk membuat indentasi kode Anda.

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 maka akan dibuat. Saat menggunakan > file akan ditimpa, sedangkan >> akan menambahkan output ke file.

Masukan heredoc juga dapat disalurkan. Pada contoh berikut sed perintah akan menggantikan semua contoh l karakter 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 nyaman dan termudah untuk menjalankan banyak perintah pada sistem jarak jauh melalui SSH.

Saat menggunakan pembatas yang tidak dikutip, pastikan Anda keluar 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 menyiapkan autentikasi berbasis kunci SSH dan menyambung ke server Linux Anda tanpa memasukkan sandi.

Kesimpulan #

Dalam panduan ini, Anda telah mempelajari apa itu heredoc dan cara menggunakannya di skrip shell Anda.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. Perintah "eval" Di Bash?

  2. perintah ekspor bash

  3. bash sh - perintah tidak ditemukan

  1. memulai apachectl dari bash

  2. Bash - Perintah tanggal dan spasi

  3. Jalankan perintah bash pada pipa jenkins

  1. Perintah Bash trap Dijelaskan

  2. Bash jika dalam satu baris

  3. Bagaimana saya bisa memeriksa karakter kata demi kata dari string perintah bash?