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