GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Eine virtuelle Datei erstellen, die eigentlich ein Befehl ist?

Gibt es eine Möglichkeit, eine virtuelle Datei zu erstellen, sodass das Lesen aus der Datei tatsächlich aus der stdout liest eines Befehls; das Schreiben in die Datei ist eigentlich das Schreiben in die stdin eines Befehls?

Bisher habe ich das mit einem inotifywait vermasselt auf eine Datei, die einen Befehl aufruft, wenn die Datei geändert wird, die Eingabe aus der Datei nimmt und in sie zurückschreibt.

Ich mag das inotifywait nicht muss aber ständig neu gestartet werden (und ich muss dafür sorgen, dass es immer läuft). Ich benutze diese Datei nur vielleicht zweimal pro Woche.

Akzeptierte Antwort:

Möglicherweise suchen Sie nach einer Named Pipe.

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

Das Schreiben in die Pipe startet das Hörprogramm nicht. Wenn Sie Eingaben in einer Schleife verarbeiten möchten, müssen Sie ein Listening-Programm am Laufen halten.

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

Beachten Sie, dass alle in die Pipe geschriebenen Daten zusammengeführt werden, auch wenn mehrere Prozesse schreiben. Wenn mehrere Prozesse lesen, erhält nur einer die Daten. Daher ist eine Pipe möglicherweise nicht für gleichzeitige Situationen geeignet.

Ein benannter Socket kann gleichzeitige Verbindungen handhaben, aber dies geht über die Fähigkeiten von einfachen Shell-Skripten hinaus.

Am komplexesten Ende der Skala befinden sich benutzerdefinierte Dateisysteme, mit denen Sie ein Dateisystem entwerfen und einhängen können, in dem sich jeder open , write usw. löst eine Funktion in einem Programm aus. Die Mindestinvestition sind Dutzende Zeilen nichttrivialer Codierung, beispielsweise in Python. Wenn Sie Befehle nur beim Lesen von Dateien ausführen möchten, können Sie scriptfs oder fuseflt verwenden.


Linux
  1. 8 gruselige Befehle, die das Terminal heimsuchen

  2. Wie kann man sicher sein, dass ein Verzeichnis oder eine Datei tatsächlich gelöscht wird?

  3. 4 Möglichkeiten zum Erstellen einer Textdatei im Linux-Terminal

  4. Verwenden Sie den Befehl fallocate, um Dateien einer bestimmten Größe in Linux zu erstellen

  5. Linux-ln-Befehl

So erstellen Sie einen symbolischen Link in Linux mit dem Ln-Befehl

Erstellen virtueller Laufwerke mit der Linux-Befehlszeile

So erstellen Sie eine Datei unter Linux mit dem Cat-Befehl

So erstellen Sie eine Datei in Linux mit Terminal

Erstellen Sie ein Virtual HardDisk (VHD)-Volume mit einer Datei in Linux

So erstellen Sie eine große 1-GB- oder 10-GB-Datei in einem Linux-System