GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menggunakan Pengalihan Output Dalam Kombinasi Dengan Dokumen Di Sini Dan Cat?

Katakanlah saya memiliki skrip yang ingin saya salurkan ke perintah lain atau mengarahkan ulang ke file (menyalurkan ke sh untuk contoh). Asumsikan saya menggunakan bash.

Saya bisa melakukannya menggunakan echo :

echo "touch somefile
echo foo > somefile" | sh

Saya juga bisa melakukan hal yang hampir sama menggunakan cat :

cat << EOF
touch somefile
echo foo > somefile
EOF

Tetapi jika saya mengganti “EOF” dengan “EOF | sh” itu hanya berpikir bahwa itu adalah bagian dari heredoc.

Bagaimana caranya agar cat mengeluarkan teks dari stdin, lalu menyalurkannya ke lokasi yang berubah-ubah?

Jawaban yang Diterima:

Ada beberapa cara untuk melakukan ini. Yang paling sederhana mungkin ini:

cat <<EOF | sh
touch somefile
echo foo > somefile
EOF

Lain, yang sintaksnya lebih bagus menurut saya:

(
cat <<EOF
touch somefile
echo foo > somefile
EOF
) | sh

Ini juga berfungsi, tetapi tanpa subkulit:

{
cat <<EOF
touch somefile
echo foo > somefile
EOF
} | sh

Lebih banyak variasi:

cat <<EOF |
touch somefile
echo foo > somefile
EOF
  sh

Atau:

{ cat | sh; } << EOF
touch somefile
echo foo > somefile
EOF

Omong-omong, saya mengharapkan penggunaan cat dalam pertanyaan Anda adalah pengganti untuk sesuatu yang lain. Jika tidak, keluarkan, seperti ini:

sh <<EOF
touch somefile
echo foo > somefile
EOF

Yang bisa disederhanakan menjadi ini:

sh -c 'touch somefile; echo foo > somefile'

atau:

sh -c 'touch somefile
echo foo > somefile'

Mengalihkan keluaran alih-alih pemipaan

sh >out <<EOF
touch somefile
echo foo > somefile
EOF

Menggunakan cat untuk mendapatkan yang setara dengan echo test > out :

cat >out <<EOF
test
EOF

Beberapa Dokumen Di Sini

( cat; echo ---; cat <&3 ) <<EOF 3<<EOF2
hi
EOF
there
EOF2

Ini menghasilkan output:

hi
---
there

Inilah yang terjadi:

  • Shell melihat ( ... ) dan menjalankan perintah terlampir dalam subkulit.
  • Kucing dan gema cukup sederhana. cat <&3 mengatakan untuk menjalankan cat dengan deskriptor file (fd) 0 (stdin) dialihkan dari fd 3; dengan kata lain, keluarkan input dari fd 3.
  • Sebelum (...) dimulai, shell melihat dua dokumen di sini dialihkan dan menggantikan fd 0 (<<EOF ) dan fd 3 (3<<EOF2 ) dengan sisi baca pipa
  • Setelah perintah awal dimulai, shell membaca stdinnya sampai EOF tercapai dan mengirimkannya ke sisi tulis dari pipa pertama
  • Selanjutnya, ia melakukan hal yang sama dengan EOF2 dan sisi tulis pipa kedua
Terkait:Dukungan Tmux, TERM dan 256 warna?
Linux
  1. Cara Menggunakan Cat, Tac, More, Less – Perintah Linux

  2. Cara Menggunakan Perintah Shutdown dan Reboot Linux dengan Contoh

  3. Cara grep keluaran ps dengan header

  1. Bagaimana saya menggunakan Vagrant dengan libvirt

  2. Cara Menggunakan Perintah 'cat' dan 'tac' dengan Contoh di Linux

  3. Bekerja dengan Input Output dan Error Redirection di Linux

  1. Cara Menggunakan Pipes dan Named Pipes di Linux (dengan Contoh)

  2. Cara Menginstal Dan Menggunakan Flatpak Di Linux

  3. Bagaimana Cara Mengingat Cara Menggunakan Redirection?