GNU/Linux >> Belajar Linux >  >> Linux

Beberapa masukan standar? Bagaimana?

Ini bukan beberapa input standar. Ini adalah bash'isme yang disebut 'Pergantian Proses'http://tldp.org/LDP/abs/html/process-sub.html

Itu membuat file pseudo (/dev/fd/something ) untuk setiap substitusi. Ini sangat berguna. Perintah hanya bisa dibaca sebagai aliran, artinya tidak bisa bolak-balik dengan fseek. Perlu membacanya sebagai aliran byte, seperti pipa.

Jawaban BONUS

Anda tidak perlu melakukan terlalu banyak untuk menggunakan ini. Sejauh menyangkut skrip Anda, ia mendapat nama file yang valid di baris perintah, yang dapat dibuka () seperti yang lainnya. Seperti yang dikatakan orang lain, Anda akan melihat diff /dev/fd/XX /dev/fd/YY . Jika Anda melakukan stat() pada salah satu file pseudo ini, Anda akan melihat itu adalah pipa bernama, dan Anda harus memperlakukannya dengan semantik pipa - yaitu tidak ada fseek() atau ftell(). Jika Anda melakukan tes stat() untuk secara eksplisit melihat apakah itu file (mis. [ -f $1 ] ) ini akan break - ini diimplementasikan sebagai pipa bernama.


<(...) apakah memproses substitusi di pesta. Output dari proses di parens dikirim ke deskriptor file tambahan di luar normal 3, dan nama file dikembalikan sesuai dengan deskriptor file tersebut. Dengan cara ini output dari perintah dapat diperlakukan sebagai nama file untuk diteruskan ke perintah lain.


Ada satu stdin dan satu stdout untuk setiap proses . Mereka biasanya terhubung ke terminal, tetapi mereka dapat dialihkan secara terpisah satu sama lain.

Dalam contoh, ada dua wget proses yang terlibat, yang masing-masing mendapatkan stdin sendiri dan stdout . Setiap wget proses menulis ke - , yaitu stdout . Lalu bash substitusi proses <(...) menghubungkan stdout dari proses ke file pseudo unik, dari mana diff dapat membaca. Perhatikan bahwa dua substitusi proses menghasilkan dua file pseudo yang berbeda! Jadi, diff melihat sesuatu seperti:

diff /dev/fd/XX /dev/fd/YY

di mana stdout dari wget -q -O - URL1 terhubung ke /dev/fd/XX , dan stdout dari wget -q -O - URL2 ke /dev/fd/YY .


Linux
  1. Cara mematikan proses zombie di Linux

  2. Cara Menambahkan Banyak Host di phpMyAdmin

  3. Cara Membuat Zip Banyak File di Linux

  1. Bagaimana Cara Mengirim Stdout Ke Beberapa Perintah?

  2. Bagaimana menjalankan proses Rsync di latar belakang

  3. Python - Supervisor cara mencatat keluaran standar -

  1. Cara menginstal vtop di Linux

  2. Bagaimana Mengidentifikasi Port ke Suatu Proses?

  3. Bagaimana copy-on-write di fork() menangani banyak fork?