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.