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) dash
ist der Standardinterpreter für cron ( /bin/sh
ist 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