プロセス置換を使用すると、ダッシュは「構文エラー: "(" 予期しない」と報告します。

プロセス置換を使用すると、ダッシュは「構文エラー: "(" 予期しない」と報告します。

私は次の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

関連情報