使用進程替換時,破折號報告“語法錯誤:“(”意外”

使用進程替換時,破折號報告“語法錯誤:“(”意外”

我有以下 bash 命令

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

我需要在 中執行它dash。在我的系統(Debian Wheezy)上,dash是 cron 的預設解釋器(/bin/sh是 的連結/bin/dash)。

當我執行 中的命令時dash,出現以下錯誤:

Syntax error: "(" unexpected

答案1

如果您在從 cron 作業執行某些內容時需要特定的 shell,請將其包裝在腳本中並從 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

相關內容