次のbashコマンドがあります
diff <(xzcat file1.xz) <(xzcat file2.xz)
で実行する必要がありますdash
。私のシステム(Debian Wheezy)では、dash
cronはデフォルトのソルバーです(/bin/sh
yes link /bin/dash
)。
でコマンドを実行すると、dash
次のエラーが発生します。
Syntax error: "(" unexpected
答え1
cronジョブで何かを実行するときに特定のシェルが必要な場合は、それをスクリプトにラップしてcronからスクリプトを呼び出します。
#!/bin/bash
diff <(xzcat file1.xz) <(xzcat file2.xz)
タイムアウト作業入口
* * * * * 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