【问题标题】:How do you make command2 wait for command1 to exit when executing command1 | command2?执行command1时如何让command2等待command1退出?命令2?
【发布时间】:2019-04-17 15:55:54
【问题描述】:

我正在尝试将 dmenu 的输出通过管道传输到 surf(浏览器)以浏览选定的 URL。我在做:

cat ~/.surf/bookmarks | dmenu | surf

但是 surf 在 dmenu 使用我选择的 URL 退出之前开始。这意味着它没有使用正确的 URL 打开。我看不出问题出在哪里,因为 dmenu 在做出选择后会将 URL 打印到标准输出,并且 surf 将 URL 作为其参数。澄清一下,书签文件只在不同的行中包含 URL。

我在 i3 中使用它作为绑定符号。我也试过了

surf (cat ~/.surf/bookmarks | dmenu)

fish shell 语法,因为那是我的 shell。 提前致谢。

【问题讨论】:

  • and surf works taking a URL as its argument. 不过,您正在将其通过管道传输到标准输入。
  • 可能是surf $(cat ~/.surf/bookmarks | dmenu)?
  • @Bodo 谢谢它的工作!我曾尝试过使用鱼壳语法(如在我的终端中)。但是,似乎 i3 exec 使用 bash。所以,你的版本有效。如果你给它作为答案,我会接受它。

标签: unix browser pipe i3


【解决方案1】:

正如 tkauusl 的评论中提到的,surf 应该将 URL 作为命令行参数获取,而不是通过管道传输到 stdin

对于 bash 和 POSIX 兼容的 shell,您可以使用以下语法:

surf $(cat ~/.surf/bookmarks | dmenu)

对于您可能必须使用的其他外壳

surf `cat ~/.surf/bookmarks | dmenu`

如果 URL 可以包含空格,则应引用命令替换的结果。

surf "$(cat ~/.surf/bookmarks | dmenu)"

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多