Dash informa 'Error de sintaxis: "(" inesperado' al utilizar la sustitución de procesos

Dash informa 'Error de sintaxis: "(" inesperado' al utilizar la sustitución de procesos

Tengo el siguiente comando bash

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

y necesito ejecutarlo en dash. En mi sistema (Debian Wheezy), dashestá el intérprete predeterminado para cron ( /bin/shes 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

información relacionada