Tengo el siguiente comando bash
diff <(xzcat file1.xz) <(xzcat file2.xz)
y necesito ejecutarlo en dash
. En mi sistema (Debian Wheezy), dash
está el intérprete predeterminado para cron ( /bin/sh
es un enlace a /bin/dash
).
Cuando ejecuto el comando en dash
, aparece el siguiente error:
Syntax error: "(" unexpected
Respuesta1
Si necesita un shell específico cuando ejecuta algo desde un trabajo cron, envuélvalo en un script y llame al script desde el cron.
#!/bin/bash
diff <(xzcat file1.xz) <(xzcat file2.xz)
entrada cron
* * * * * user-name /path/to/above/script.bash
Respuesta2
Sí, la sustitución de procesos es una característica no estándar originada en ksh y solo disponible en ksh, bash y zsh.
En sistemas compatibles /dev/fd/n
(como Debian), puedes hacer:
xzcat < file1.xz | { xzcat < file2.xz | diff /dev/fd/3 -; } 3<&0
O siempre puedes hacer:
bash -c 'diff <(xzcat file1.xz) <(xzcat file2.xz)'
Respuesta3
Si debes usar dash
, esto funcionará:
mkfifo file1
mkfifo file2
xzcat file1.xz >file1&
xzcat file2.xz >file2&
diff file1 file2
rm -f file1 file2 #remove the FIFOs