OK in Bash, nicht OK in Sh – Konvertierung diff < (ls) < (df)

OK in Bash, nicht OK in Sh – Konvertierung diff < (ls) < (df)

In GNU Bash diff <(df) <(ls)läuft es.
In shnicht.
Ich habe es auch versucht [[diff </bin/df <bin/ls]], es tritt immer noch der Fehler auf:

$ [[/usr/bin/diff < (/bin/ls) < (bin/df)]]
sh: 1: Syntax error: "(" unexpected
$ bash

kennt jemand das Äquivalent von sh? Ich bin wirklich für die Hilfe dankbar.

Antwort1

Es gibt kein direktes Äquivalent zu <(…) >(…)Ersetzungen – Sie müssen als Ersatz manuell benannte Pipes erstellen:

mkfifo /tmp/lspipe
mkfifo /tmp/dfpipe
/bin/ls > /tmp/lspipe &
/bin/df > /tmp/dfpipe &
/usr/bin/diff /tmp/lspipe /tmp/dfpipe
rm /tmp/lspipe /tmp/dfpipe

(Beachten Sie auch, dass es in BashNEINLeerzeichen zwischen dem <und dem (…).)

Sie [[…]]ergeben in diesem Kontext absolut keinen Sinn. Sie dienen nicht zum Gruppieren von Befehlen, sondern zum Schreiben bedingter Ausdrücke (nicht zu verwechseln mit ( )oder { }, die Befehle gruppieren). Es ist auch eine Bash-spezifische Funktion, aber an Stellen, an denen es richtig verwendet wird, kann es durch [ … ]oder durch ersetzt werden expr.

verwandte Informationen