dash сообщает «Ошибка синтаксиса: «(» непредвиденная» при использовании подстановки процесса

dash сообщает «Ошибка синтаксиса: «(» непредвиденная» при использовании подстановки процесса

У меня есть следующая команда bash

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

и мне нужно выполнить его в dash. В моей системе (Debian Wheezy) dashявляется интерпретатором по умолчанию для cron ( /bin/shявляется ссылкой на /bin/dash).

При выполнении команды в dashя получаю следующую ошибку:

Syntax error: "(" unexpected

решение1

Если вам нужна определенная оболочка при запуске чего-либо из задания cron, оберните это в скрипт и вызовите скрипт из cron.

#!/bin/bash

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

Запись Cron

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

решение2

Да, подстановка процессов — это нестандартная функция, появившаяся в ksh и доступная только в ksh, bash и zsh.

В системах, которые поддерживают /dev/fd/n(например, Debian), вы можете сделать следующее:

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

Или вы всегда можете сделать:

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

решение3

Если вам необходимо использовать dash, это сработает:

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

Связанный контент