Apakah ada cara untuk membuat file virtual, sehingga membaca dari file benar-benar membaca dari stdout
dari sebuah perintah; menulis ke file sebenarnya menulis ke stdin
dari sebuah perintah?
Sejauh ini saya telah mengambil ini dengan inotifywait
pada file, yang memanggil perintah saat file dimodifikasi, mengambil input dari file dan menulis kembali ke sana.
Saya tidak suka inotifywait
harus terus-menerus di-restart (dan saya harus memastikan bahwa itu selalu berjalan). Saya hanya menggunakan file ini mungkin dua kali seminggu.
Jawaban yang Diterima:
Anda mungkin mencari pipa bernama.
mkfifo f
{
echo 'V cebqhpr bhgchg.'
sleep 2
echo 'Urer vf zber bhgchg.'
} >f
rot13 < f
Menulis ke pipa tidak memulai program mendengarkan. Jika Anda ingin memproses input dalam satu lingkaran, Anda harus tetap menjalankan program mendengarkan.
while true; do rot13 <f >decoded-output-$(date +%s.%N); done
Perhatikan bahwa semua data yang ditulis ke pipa digabungkan, meskipun ada beberapa proses penulisan. Jika beberapa proses membaca, hanya satu yang mendapatkan data. Jadi pipa mungkin tidak cocok untuk situasi bersamaan.
Soket bernama dapat menangani koneksi bersamaan, tetapi ini di luar kemampuan skrip shell dasar.
Pada skala yang paling kompleks adalah sistem file khusus, yang memungkinkan Anda mendesain dan memasang sistem file di mana setiap open
, write
, dll., memicu fungsi dalam suatu program. Investasi minimum adalah puluhan baris pengkodean nontrivial, misalnya dengan Python. Jika Anda hanya ingin menjalankan perintah saat membaca file, Anda dapat menggunakan scriptfs atau fuseflt.