在第一次循环后,在while循环中运行`rg`会中断

时间:2019-02-11 10:38:46

标签: bash

我的脚本很简单:

while read -r key; do
  rg --glob='!some_dir' --fixed-strings --quiet "$key" || echo "$key"
done < <(grep 'some_pattern' some/file | cut -d'"' -f2)

我希望使用此bash脚本来打印未使用的键。但是,此循环在每次运行的第一次迭代后都会中断。为什么以及如何解决?谢谢:D

1 个答案:

答案 0 :(得分:2)

当命令在while..read循环上运行的情况也从标准输入开始时,这看起来像是经典签名。您预期grep的输出将由while循环以迭代的方式读取,但是由于某些原因,您的命令rg也是从 读取的。

关闭为

rg --glob='!some_dir' --fixed-strings --quiet "$key" < /dev/null || echo "$key"

或使用其他文件描述符

while read -r -u 3 key; do
  rg --glob='!some_dir' --fixed-strings --quiet "$key" || echo "$key"
done 3< <(grep 'some_pattern' some/file | cut -d'"' -f2)