/ / Ausgabe von Datei nach stdout umleiten - bash, shell, unix, stdout

Leiten Sie die Ausgabe von der Datei nach stdout um - bash, shell, unix, stdout

Ich habe ein Programm, das seine Ergebnisse nur in Dateien ausgeben kann -o Möglichkeit. Dieses Mal muss ich es auf der Konsole ausgeben, d. H. stdout. Hier ist mein erster Versuch:

myprog -o /dev/stdout input_file

Aber es sagt:

/ dev / nicht beschreibbar

Ich habe gefunden diese Frage das ist meiner ähnlich, aber /dev/stdout wird offensichtlich nicht ohne zusätzliche Magie funktionieren.

F: So leiten Sie die Ausgabe von der Datei in die Datei um stdout?

P.S. Herkömmliche Methoden ohne spezielle Software sind zu bevorzugen.

Antworten:

5 für die Antwort № 1

Viele Werkzeuge interpretieren a - als stdin / stdout je nach Verwendungskontext. Dies ist jedoch nicht Teil der Shell und hängt daher vom verwendeten Programm ab.

In Ihrem Fall könnten die folgenden Probleme Ihr Problem lösen:

myprog -o - input_file

4 für die Antwort № 2

Wenn das Programm nur in eine Datei schreiben kann, können Sie eine Named Pipe verwenden:

pipename=/tmp/mypipe.$$
mkfifo "$pipename"

./myprog -o "$pipename" &

while read line
do
echo "output from myprog: $line"
done < "$pipename"

rm "$pipename"

Zuerst erstellen wir die Pfeife, wir legen sie hinein /tmp um es für Backup-Programme zu verhindern. Das $$ ist unsere PID und macht den Namen zur Laufzeit eindeutig.

Wir führen das Programm im Hintergrund aus und das sollte es auchBlock versucht, in die Pipe zu schreiben. Einige Programme verwenden eine Technik, die als "Speicherzuordnung" bezeichnet wird. In diesem Fall schlägt das fehl, da eine Pipe nicht mit dem Speicher belegt werden kann (ein gutes Programm würde dies überprüfen).

Dann lesen wir die Pipe im Skript wie jede andere Datei.

Zum Schluss löschen wir die Pfeife.


2 für die Antwort № 3

Sie können cat der Inhalt der von myprog.

myprog -o tmpfile input_file && cat tmpfile

Dies hätte den beschriebenen Effekt - Sie können die Ausgabe von pfeifen myprog zu einem späteren Befehl - obwohl es ein anderer Ansatz ist, als Sie gedacht hatten

In dem Umstand, dass die Ausgabe von myprog (vielleicht passender notmyprog) ist zu groß, um auf die Festplatte zu schreiben, dieser Ansatz wäre nicht gut.

Eine Lösung, die die temporäre Datei in derselben Zeile bereinigt und den Inhalt am Ende dennoch weiterleitet, wäre dies

myprog -o tmpfile input_file && contents=`cat tmpfile` && rm tmpfile && echo "$contents"

Die speichert den Inhalt der Datei in einer Variablen, so dass nach dem Löschen der Datei darauf zugegriffen werden kann. Beachten Sie die Anführungszeichen im Argument von echo Befehl. Dies ist wichtig, um Zeilenumbrüche im Dateiinhalt zu erhalten.