首页 > 解决方案 > 在第一次迭代后,在 while 循环中运行 `rg` 会中断

问题描述

我的脚本很简单:

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

标签: bash

解决方案


当命令在循环上运行也从标准输入开始时,这看起来像是典型的案例签名。while..read您希望grepwhile 循环以迭代方式读取 的输出,但由于某种原因,您的命令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)

推荐阅读