执行command1时如何让command2等待command1退出 |命令2?

How do you make command2 wait for command1 to exit when executing command1 | command2?

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

cat ~/.surf/bookmarks | dmenu | surf

但是在我选择的 URL 退出 dmenu 之前冲浪就开始了。这意味着它不会以正确的 URL 打开。我看不出问题是什么,因为 dmenu 在做出选择后将 URL 打印到标准输出,而 surf 以 URL 作为其参数。澄清一下,书签文件只包含 URL 分行。

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

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

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

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

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

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

对于其他 shell,您可能必须使用

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

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

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