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

Isi kandungan:

Anonim

Semasa menulis skrip shell, anda mungkin berada dalam keadaan di mana anda perlu lulus blok teks atau kod berbilang multiline kepada perintah interaktif, seperti tee , cat , atau sftp .

Dalam Bash dan cengkerang lain seperti Zsh, satu dokumen Berikut (Heredoc) adalah sejenis pengalihan yang membolehkan anda melewati beberapa baris input kepada arahan.

Sintaks penulisan HereDoc mengambil bentuk berikut:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Baris pertama bermula dengan perintah pilihan diikuti oleh operator pengalihan khas << dan pengecam pengecualian.
    • Anda boleh menggunakan rentetan sebagai pengecam pengecualian, yang paling biasa digunakan ialah EOF atau END.Jika pengecam pengecualian tidak disebutkan, shell akan menggantikan semua pembolehubah, arahan dan aksara khusus sebelum melewatkan baris dokumen di sini. tolak tanda kepada operator pengalihan <<- , akan menyebabkan semua watak tab terkemuka diabaikan. Ini membolehkan anda menggunakan indentasi apabila menulis di sini-dokumen dalam skrip shell. Watak ruang kosong utama tidak dibenarkan, hanya tab.
    Blok dokumen di sini boleh mengandungi rentetan, pembolehubah, arahan dan sebarang jenis input lain. Barisan terakhir berakhir dengan pengecam pengecualian. Ruang putih di depan pembatas tidak dibenarkan.

Contoh-contoh asas Heredoc

Dalam bahagian ini, kita akan melihat beberapa contoh asas cara menggunakan heredoc.

Heredoc paling sering digunakan dalam kombinasi dengan perintah kucing.

Dalam contoh berikut, kami melewati dua baris teks yang mengandungi pembolehubah persekitaran dan perintah untuk 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, kedua-dua pemboleh ubah dan output arahan diganti:

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

Mari lihat apa yang akan berlaku jika kita melampirkan pemisah dalam petikan tunggal atau berganda.

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

Anda dapat melihat bahawa apabila pembatas dipetik tidak ada pengembangan parameter dan penggantian 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.

Daripada memaparkan output pada skrin anda boleh mengalihkannya ke fail menggunakan operator >> , >> .

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

Jika file.txt tidak wujud, ia akan diwujudkan. Apabila menggunakan > fail akan ditimpa, sementara >> akan menambahkan output ke fail tersebut.

Input heredok juga boleh disalurkan. Dalam contoh berikut, perintah sed akan menggantikan semua contoh watak l dengan e :

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

Heeeo Wored

Untuk menulis data paip ke fail:

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

Menggunakan Heredoc dengan SSH

Menggunakan Heredoc adalah salah satu cara yang paling mudah dan paling mudah untuk melaksanakan beberapa arahan pada sistem jauh melalui SSH.

Apabila menggunakan pemisah yang tidak disebutkan pasti pastikan anda melarikan diri dari semua pembolehubah, arahan dan aksara khas jika tidak, mereka akan diinterpolasi di dalam negara:

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 juga boleh menyiapkan pengesahan berasaskan kunci SSH dan menyambung ke pelayan Linux anda tanpa memasukkan kata laluan.

Kesimpulannya

Dalam panduan ini, anda telah mempelajari apa yang heredoc dan cara menggunakannya dalam skrip shell anda.

terminal bash