2016-08-05 48 views
4

in bash/zsh macht das Ausgabeverhalten als Datei. Existiert ein POSIX-Äquivalent?POSIX-Shell entspricht <()

+4

[POSIX spezifiziert nicht, Prozess-Substitution, aber Sie können Named Pipes verwendet, um das Gleiche zu erreichen.] (Http://mywiki.wooledge.org/ProcessSubstitution) – bishop

+0

Mögliches Duplikat von [Ist es möglich, Prozesssubstitution auf msys/mingw (mit bash 3.x) nachzuahmen] (http://stackoverflow.com/questions/20866832/is-it-possible-to-mimi- process-substitution-auf-msys-mingw-with-bash-3-x) –

+1

@PP, ich mag diese spezifische potentielle Täuschung nicht wirklich, da sie einige Missverständnisse auffaltet (unter ihnen, dass b Asche 3.x * unterstützt keine Prozesssubstitution; Das ist eine msys-Einschränkung, im Gegensatz zu einer versionsbasierten. –

Antwort

10
mkfifo foo.fifo 

## if your "commands" is multiple commands 
# { commands ...; } >foo.fifo & 

# otherwise, if it's just one 
commands ... >foo.fifo & 

something_else foo.fifo 

ist die nächste verfügbare entspricht

something_else <(commands ...) 
+0

Mögliche "Robustheit" -Verbesserungen wären, etwas wie "mktemp" zu verwenden, um ein Verzeichnis für eine oder mehrere Pipes zu erzeugen, die vor Kollisionen sicher sind (oder einfach einen Namen für die Pipe zu generieren, da 'mkfifo' atomar ist) usw. In Wirklichkeit ist das alles "<(...)" hinter den Kulissen: Es ist nur syntaktischer Zucker für eine robustere Variante dieser Antwort. – mtraceur

+1

@mtraceur, das ist '<(...)' tut hinter den Kulissen * auf Plattformen, auf denen '/ dev/fd' nicht verfügbar ist *; es verwendet 'pipe (2)' anonyme Deskriptorpaare, wo es ist. –

+0

Rechts. Danke für die Korrektur - das habe ich vergessen. – mtraceur