【问题标题】:Program starts before it's piped into程序在输入之前启动
【发布时间】:2021-04-06 08:58:49
【问题描述】:
man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf | zathura -
# searches for a man page and then outputs it as pdf to zathura

这是命令,它工作得很好,除了 zathura 在等待标准输入给它输入时开始空白。将焦点从 zathura 转移回终端真的很烦人 然后回到zathura。

我对脚本相当陌生,所以我认为可能有一种我不知道的解决方法。

还是谢谢!

【问题讨论】:

  • 程序在各自独立的进程中运行。 shell 设置管道并启动进程。它无法知道其中一个进程是否已经开始填充管道。你能做的最好的事情是围绕 zathura 编写一个包装器,它使用它的标准输入并将其存储在内部,一旦它在标准输入上得到一些东西,就启动 zathura 并将输入传递给 zathura。
  • 为什么不完全分开生成 PDF 和查看?问题是 zathura 似乎两者兼而有之。您可以使用一个仅创建 PDF 的程序,如果文件已完全创建,请启动您的 PDF 查看器。您可以将这两个步骤捆绑到一个脚本中。

标签: linux shell pipe zsh pipeline


【解决方案1】:

我“解决”了我的问题,我将输出重定向到我的 /tmp/ 目录,然后从那里读取 zathura。我也把它全部放在一个脚本中。

   #!/bin/sh
   d=$(date +'%M_%S');
   man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf > /tmp/man_${d};
   zathura /tmp/man_${d} 2> /dev/null &

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多