dash relata 'Erro de sintaxe: "(" inesperado' ao usar a substituição de processo

dash relata 'Erro de sintaxe: "(" inesperado' ao usar a substituição de processo

Eu tenho o seguinte comando bash

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

e preciso executá-lo em dash. No meu sistema (Debian Wheezy), dashé o intérprete padrão do cron ( /bin/shé um link para /bin/dash).

Quando executo o comando em dash, recebo o seguinte erro:

Syntax error: "(" unexpected

Responder1

Se você precisar de um shell específico ao executar algo a partir de um cron, envolva-o em um script e chame o script do cron.

#!/bin/bash

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

Entrada Cron

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

Responder2

Sim, a substituição de processos é um recurso não padrão originado em ksh e disponível apenas em ksh, bash e zsh.

Em sistemas compatíveis /dev/fd/n(como Debian), você pode fazer:

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

Ou você sempre pode fazer:

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

Responder3

Se você precisar usar dash, isso funcionará:

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

informação relacionada