Dash meldet „Syntaxfehler: „(“ unerwartet“ bei Verwendung der Prozesssubstitution

Dash meldet „Syntaxfehler: „(“ unerwartet“ bei Verwendung der Prozesssubstitution

Ich habe folgenden Bash-Befehl

diff <(xzcat file1.xz) <(xzcat file2.xz)

und ich muss es in ausführen dash. Auf meinem System (Debian Wheezy) dashist der Standardinterpreter für cron ( /bin/shist ein Link zu /bin/dash).

Wenn ich den Befehl in ausführe dash, erhalte ich folgenden Fehler:

Syntax error: "(" unexpected

Antwort1

Wenn Sie beim Ausführen von etwas über einen Cron-Job eine bestimmte Shell benötigen, binden Sie es in ein Skript ein und rufen Sie das Skript über den Cron auf.

#!/bin/bash

diff <(xzcat file1.xz) <(xzcat file2.xz)

Cron-Eintrag

*  *  *  *  * user-name  /path/to/above/script.bash

Antwort2

Ja, Prozesssubstitution ist eine nicht standardmäßige Funktion, die ursprünglich aus KSH stammt und nur in KSH, Bash und Zsh verfügbar ist.

Auf Systemen, die dies unterstützen /dev/fd/n(wie Debian), können Sie Folgendes tun:

xzcat < file1.xz | { xzcat < file2.xz | diff /dev/fd/3 -; } 3<&0

Oder Sie können jederzeit Folgendes tun:

bash -c 'diff <(xzcat file1.xz) <(xzcat file2.xz)'

Antwort3

Wenn Sie verwenden müssen dash, funktioniert dies:

mkfifo file1
mkfifo file2
xzcat file1.xz >file1&
xzcat file2.xz >file2&
diff file1 file2
rm -f file1 file2 #remove the FIFOs

verwandte Informationen