У меня есть следующая команда 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