以下 bash-fu 代码在 Linux 上运行良好,但在 MacOS 上中断:
files="foo bar"
echo PROG 1
for file in $files
do
echo $file | tee -a tempfile.txt
done
sort -u tempfile.txt
echo PROG 2
function trick {
for file in $files
do
echo $file | tee -a $1
done
}
trick >(sort -u)
错误是:
PROG 1
foo
bar
bar
foo
PROG 2
tee: /dev/fd/63: Bad file descriptor
foo
tee: /dev/fd/63: Bad file descriptor
bar
在 Linux 上写入与没有错误PROG 2
相同的行。PROG 1
在 MacOS 上,管道句柄似乎已关闭或未继承。
以上是重现问题的最小化样本。实际上,我会大量处理绑定输出和重定向句柄。精神上的东西
function trick {
for file in $files
do
echo $file | tee -a $1 | grep -Eo "^.."
done
}
trick >(sort -u | sed 's|o|x|g')
该代码在 Bash 4.1 中不起作用,但在多个发行版(Arch、Ubuntu 和 Debian)中的 Bash 4.4 中起作用