【问题标题】:Prevent "head" from waiting for the stream to end防止“头”等待流结束
【发布时间】:2016-05-13 10:57:55
【问题描述】:
svn log -r HEAD:1 | grep $pattern --line-buffered | awk '{print $1}'

上面打印出与pattern匹配的所有提交的修订号(例如,由某个用户完成)。这可以正常工作,只是它会持续流式传输整个 svn 日志(可能很长)并且只会在到达结束后结束。

因为我只需要最近的历史,所以我尝试过:

svn log -r HEAD:1 | grep $pattern --line-buffered | awk '{print $1}' | head

但这只是挂起 - 我假设它正在等待流结束,但这对我来说是不可接受的。

如何防止head 等待流结束(而是在获得 10 行后立即结束)?

【问题讨论】:

  • 打印 10 行并挂起?
  • 不,它不打印任何东西 - 它只是等待输入完成。
  • 这真的很奇怪......
  • 你为什么不用svn log --search
  • @bahrep 因为我不知道。谢谢。

标签: bash svn grep head


【解决方案1】:

因为我只需要最近的历史记录

我认为您需要 -m 选项和 grep

试试这个:

svn log -r HEAD:1 | grep -m 1 "$pattern"
  • -m NUM - 在 NUM 个匹配行之后停止读取文件。

【讨论】:

  • 完美!我只是没想到在grep 中寻找这个。我可能会接受这个答案,但我会等待一段时间,以防其他人有其他可行的解决方案。
  • 建议您进行编辑:我假设他们都在等待流 - 如果 head 有一个 -m 选项,如 grep ,那么它应该也可以工作。还是我错了?
  • @NPS:head 有一个像你说的那样的选项,但它会等到整个流读取完成并选择前 10 行,参考我的答案,但@sat 的答案很聪明将流读取限制为仅 10 个实例
  • grep 不等待流。
  • 最好去掉useless grepsvn log -r HEAD:1 | awk -v p="$pattern" '$0 ~ p { print $1; exit }'
猜你喜欢
  • 2019-10-17
  • 2022-08-20
  • 2019-01-31
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2021-05-13
  • 2018-06-14
相关资源
最近更新 更多