Ada fitur yang agak tidak jelas di shell Linux dan Unix yang memungkinkan Anda membuka semacam loop do-while untuk perintah kucing. Ini disebut keturunan , dan ini memungkinkan Anda untuk memiliki, kurang lebih, editor teks apa pun shell yang Anda gunakan. Sintaksnya adalah:
$ cat << EOF >> example.txt
String di tengah, pada dasarnya, adalah kondisional yang menghentikan loop. Artinya, jika Anda mengetik sendirian pada satu baris, loop berakhir. Selama pengulangan, apa pun yang Anda ketikkan ke terminal Anda disalurkan ke file tujuan (dalam hal ini).
Memasang
Lebih banyak sumber daya Linux
- Lembar contekan perintah Linux
- Lembar contekan perintah Linux tingkat lanjut
- Kursus online gratis:Ikhtisar Teknis RHEL
- Lembar contekan jaringan Linux
- Lembar contekan SELinux
- Lembar contekan perintah umum Linux
- Apa itu container Linux?
- Artikel Linux terbaru kami
Selama Anda memiliki terminal, Anda sudah memiliki kemampuan untuk memulai heredoc. Saya telah menggunakan trik sintaksis ini di Bash, tsch, dan Korn shell.
Menggunakan heredoc
Untuk membuka "sesi" heredoc, Anda menggunakan perintah cat dengan pengalihan yang menunjuk pertama ke cat dengan string pemutusan (konvensi umum adalah EOF untuk "End Of File", tetapi sebenarnya bisa apa saja). Setelah kata kunci terminasi, Anda mengarahkan output ke file tujuan. Anda kemudian dapat mengetik langsung ke terminal Anda, menggunakan pintasan keyboard shell yang paling umum untuk menavigasi pekerjaan Anda. Sesi Anda berakhir ketika Anda mengetikkan string pengakhiran yang ditentukan pada sebuah baris dengan sendirinya. Anda tahu bahwa Anda berada dalam lingkaran heredoc dengan prompt unik (biasanya > karakter).
$ cat << EOF >> example.txt
> Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
>
> whatever...
>
> you want to type.
>
> EOF
$
Semua yang Anda masukkan saat terminal Anda menunggu EOF ditempatkan ke dalam file tujuan. Karakter prompt dihilangkan, dan EOF itu sendiri bukan bagian dari file.
Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
whatever...
you want to type.
Secara realistis, Anda mungkin tidak akan menggunakan sintaks heredoc sebagai pengganti editor teks yang bagus. Ini adalah peretasan cepat yang bagus untuk memasukkan lebih dari satu baris, tetapi lebih dari 10 baris atau lebih mulai mengurangi kegunaannya. Misalnya, Anda tidak dapat naik untuk mengedit baris sebelumnya tanpa memicu fungsi riwayat shell Anda. Bergantung pada shell Anda dan bagaimana konfigurasinya, Anda mungkin dapat naik, lalu turun untuk mengingat teks Anda, dan kemudian menelusuri kembali teks Anda dengan Ctrl+B .
Sebagian besar fitur shell Anda berfungsi seperti yang diharapkan, tetapi mungkin tidak ada pembatalan dan sangat sedikit pemulihan kesalahan.
Selain itu, penginstalan yang paling minimal pun cenderung memiliki setidaknya Vi atau ed.
Namun heredoc masih berguna! Ini lebih fleksibel daripada gema , dan saat Anda mengerjakan skrip shell, itu sangat diperlukan. Misalnya, bayangkan Anda sedang menulis skrip penginstal sehingga Anda dapat mengotomatiskan pemasangan serangkaian aplikasi khusus. Salah satu aplikasi tidak didistribusikan dengan .dekstop
file, sehingga tidak muncul di menu Aplikasi Anda. Untuk memperbaikinya, Anda memutuskan untuk membuat .desktop
file pada waktu penginstalan.
Daripada menulis .desktop
file dan membawanya sebagai ketergantungan eksternal untuk skrip instalasi Anda, Anda dapat menggunakan heredoc di skrip instalasi Anda sendiri:
#!/bin/sh
VERSION=${VERSION:-x.y.z}
PKGNAM=${VERSION:-example}
PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz
# download package
wget "${PKG}"
tar txvf "${PKG}"
# use here doc to create missing .desktop file
cat << EOF >> $HOME/.local/share/applications/example.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name="${PKGNAM}"
Comment="${PKGNAM}"
Exec="${PKGNAM}" %F
EOF
# insert the rest of an install script...
Anda memiliki entri teks otomatis ke dalam file, tidak ada editor teks yang terlibat (kecuali yang Anda gunakan untuk menulis skrip Anda, tentu saja). Berikut hasil .desktop
file terlihat seperti:
[Desktop Entry]
Version=1.0
Type=Application
Name=example
Comment=example
Exec=example %F
Seperti yang Anda lihat, Anda dapat menggunakan variabel dalam dokumen ini, dan variabel tersebut diselesaikan dengan benar. EOF
string tidak muncul di file; itu hanya menandakan akhir dari heredoc.
Lebih baik dari gema
Teknik heredoc umumnya dianggap lebih mudah daripada echo
atau printf karena setelah "masuk" dokumen, Anda bebas melakukan apa pun yang diinginkan. Ini membebaskan dalam pengertian itu, tetapi terbatas dibandingkan dengan editor teks yang tepat.
Gunakan heredoc untuk catatan cepat dan untuk skrip shell, dan jangan pernah bingung bagaimana membuat file konfigurasi secara dinamis lagi.