Ich versuche, die Umleitung von Eingaben in Kombination mit der Substitution von Prozessen zu verstehen. Ich benutze bash
3
Ein Beispiel mit tr
ist das folgende
$ tr "o" "a" <(echo "Foo")
tr: extra operand `/dev/fd/63'
Try `tr --help' for more information.
Ich glaube ich verstehe warum das nicht funktioniert. Die Prozessersetzung <( )
erstellt einen Dateideskriptor, in dem tr
nur von der Standardeingabe gelesen wird.
Wie kann ich dafür sorgen, dass es mit der richtigen Umleitung funktioniert?
Ich weiß, dass ich einfach Rohre verwenden könnte:
$ echo "Foo" | tr "o" "a"
Faa
Ich versuche jedoch, ein besseres Verständnis zu bekommen. Ich habe etwas mit Hilfe von man bash
versucht <&
, aber ich weiß nicht wirklich, was ich tue.
Wie kann ich die Prozessersetzung richtig verwenden tr
?
<<(
: o. Vielen Dank!ls -ld <(echo blubb)
kann eine bessere Illustration sein.Ich fand die Bash One-Liners Explained- Serie sehr nützlich, um mehr über all diese Dinge zu verstehen.
In dem oben verlinkten Artikel geht es speziell um die Umleitung von Eingaben.
So lösen Sie das obige Beispiel:
quelle
echo Foo
in einer Unterschale ausgeführt, deren Ausgabe auf eine Pipe umgeleitet wird. Es liest diese Ausgabe vom anderen Ende der Pipe und speichert sie (abzüglich der nachfolgenden Zeilenumbrüche). Sobald eof auf dieser Pipe erreicht ist, führt es abhängig von der Shell eine Wortaufteilung durch und verbindet die resultierenden Wörter mit Leerzeichen (bash
) oder nicht (zsh, ksh93). Und speichert das und einen Zeilenumbruch in einer temporären Datei. Dann wird dietr
Eingabe von dieser temporären Datei umgeleitet.