relatórios de traço 'Erro de sintaxe: “(' 'inesperado' ao usar substituição de processo

4

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 interpretador padrão para o cron ( /bin/sh é um link para /bin/dash ).

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

Syntax error: "(" unexpected
    
por Martin Vegter 02.10.2013 / 15:54

3 respostas

6

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 que suportam /dev/fd/n (como o 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)'
    
por 02.10.2013 / 17:25
7

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

#!/bin/bash

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

Entrada Cron

*  *  *  *  * user-name  /path/to/above/script.bash
    
por 02.10.2013 / 16:08
4

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
    
por 02.10.2013 / 16:37

Tags