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