GNU/Linux >> Linux Esercitazione >  >> Linux

Creare un file virtuale che è in realtà un comando?

C'è un modo per creare un file virtuale, in modo tale che la lettura del file legga effettivamente da stdout di un comando; scrivere sul file è effettivamente scrivere su stdin di un comando?

Finora l'ho combinato con un inotifywait su un file, che chiama un comando quando il file viene modificato, prendendo l'input dal file e riscrivendolo.

Non mi piace che inotifywait tuttavia, deve essere costantemente riavviato (e devo assicurarmi che sia sempre in esecuzione). Uso questo file solo forse due volte a settimana.

Risposta accettata:

Potresti cercare una pipe con nome.

mkfifo f
{
  echo 'V cebqhpr bhgchg.'
  sleep 2
  echo 'Urer vf zber bhgchg.'
} >f
rot13 < f

La scrittura sulla pipe non avvia il programma di ascolto. Se vuoi elaborare l'input in un ciclo, devi mantenere in esecuzione un programma di ascolto.

while true; do rot13 <f >decoded-output-$(date +%s.%N); done

Si noti che tutti i dati scritti nella pipe vengono uniti, anche se sono presenti più processi di scrittura. Se più processi stanno leggendo, solo uno ottiene i dati. Quindi un tubo potrebbe non essere adatto a situazioni simultanee.

Un socket denominato può gestire connessioni simultanee, ma questo va oltre le capacità degli script di shell di base.

All'estremità più complessa della scala ci sono i filesystem personalizzati, che ti consentono di progettare e montare un filesystem in cui ogni open , write , ecc., attiva una funzione in un programma. L'investimento minimo è di decine di righe di codifica non banale, ad esempio in Python. Se vuoi eseguire comandi solo durante la lettura dei file, puoi usare scriptfs o fuseflt.


Linux
  1. Come essere sicuri che una directory o un file sia effettivamente eliminato?

  2. comando Linux ln

  3. Come creare file sparsi in Linux usando il comando 'dd'

  4. Un comando per creare una directory e un file al suo interno comando linux

  5. Concatenazione di file in un file virtuale su Linux

Come creare un collegamento simbolico in Linux usando il comando Ln

Creazione di dischi virtuali utilizzando la riga di comando di Linux

Come creare un file in Linux usando Cat Command

Come creare un file in Linux usando Terminal

Crea un volume del disco rigido virtuale (VHD) utilizzando un file in Linux

Come creare un file di grandi dimensioni da 1 GB o 10 GB nel sistema Linux