提问人:sweet 提问时间:10/31/2023 更新时间:10/31/2023 访问量:29
在子壳或管道中使用我的 TUI 工具“窃取”了 stdout。如何延迟对管道的写入,以便我的 TUI 可以首先使用终端?
Using my TUI tool in a subshell or pipe "steals" the stdout. How can I delay a write to a pipe so that my TUI can use the terminal first?
问:
我正在从头开始用 Go 编写一个简单的 TUI,它将终端置于 Raw 模式(非规范模式)并关闭回显,然后它解释用户输入,绘制 TUI 并根据该输入显示图像。
我的问题是,当我构建二进制文件并在子壳或管链中运行它时,stdout 被管道和子壳吞噬,并且不显示任何内容。没有管道或子壳,它按预期运行。
预期行为:
我希望/期望该行为的行为类似于
x=$(fd | fzf)
printf "%s\n" "${x}"
在此示例中,fd(查找替代项)会吐出一个提供给 fzf 的文件列表,然后 fzf 在终端上正确显示其接口(尽管位于子壳或管道中),并将 x 分配给该输出。
如何延迟对管道/子 shell 的写入,直到我的 TUI 退出?或者我怎样才能防止管道/子壳“吃掉”stdout,以便我可以使用 /dev/tty 的 stdout,直到我准备好写入管道?
(请注意,我不是在谈论操作系统。管道,或 os/exec 包,我说的是与 Golang 中的终端 I/O 操作接口) 在这种情况下,我认为代码示例不是必需的,但是如果您必须了解我到底在做什么,那么我将把这些留在这里:https://github.com/sweetbbak/catnip/tree/main/go-catnip 和 https://github.com/sweetbbak/suwudo/blob/main/main.go
答: 暂无答案
评论