![OK in Bash, nicht OK in Sh – Konvertierung diff < (ls) < (df)](https://rvso.com/image/1606676/OK%20in%20Bash%2C%20nicht%20OK%20in%20Sh%20%E2%80%93%20Konvertierung%20diff%20%3C%20(ls)%20%3C%20(df).png)
In GNU Bash diff <(df) <(ls)
läuft es.
In sh
nicht.
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
.