bash - 在第一次迭代后,在 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
解决方案
当命令在循环上运行也从标准输入开始时,这看起来像是典型的案例签名。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)
推荐阅读
- java - Minecraft 玻璃板不会粘在附近的方块上(插口 1.16.5)
- java - 整数记忆
- python-3.x - 使用 pd.pivot_table 中的现有列初始化 pd.pivot_table 中的新列
- python - How to copy HTML content with Selenium
- google-sheets - Google Sheets Pivot Table: MIN and MAX within a group
- devops - Bamboo 有 Urban Code Deploy 插件吗?
- c++ - 如何在 CMainFrame 中处理鼠标点击
- python - 如何使 Python 代码创建一个字典,该字典包含来自预先存在的字典的元素,该字典采用一个键和多个值?
- firebase - 使用 Nuxt 的 Firestore 规则和 Nuxt/firebase
- unix - 2 个远程 ssh 命令之间的 UNIX 管道通信