我如何在不输入的情况下写入 Golang 中 Stdin 的输入字段?

所以我是新手,所以请原谅我的无知。我正在尝试编写一个最小的外壳。为此,我想实现类似于 bash 或 zsh 的命令历史记录,其中向上箭头可以将最近的命令显示出来并将其放在您的输入字段中,而无需实际输入它。


目前我正在阅读如下输入:


for {

        // prompter

        promptColor.Printf(shellPrompt)


        // read string from STDIN until newline

        input, _ := reader.ReadString('\n')

        // convert CRLF to LF

        input = strings.Replace(input, "\n", "", -1)


        // read input tokens

        tokens := SplitString(input)


        // parse tokens and execute relevant command

        Parse(tokens)

    }

使用 bufio.Reader 读入。我看了看,但找不到写入该输入的方法。


ITMISS
浏览 143回答 2
2回答

叮当猫咪

大多数想要实现此行为的软件包都将使用 GNU Readline 库。甚至 Bash shell 也在使用这个 readline 库的(修改后的副本)。考虑以下两个选项之一:使用 go-readline 包 - Go 编程语言的 GNU Readline 库的包装器。https://github.com/fiorix/go-readline使用 GNU-Readline 类库的纯 GO 替换实现。https://github.com/chzyer/readline第一条路径将为您提供防战的 ReadLine 库,但需要构建“C”代码。您可以根据自己的经验/限制来决定走哪条路。

呼唤远方

shell 中没有“输入字段”;根本没有字段。只有一个输入流、一个输出流和一个错误流。你也不想写给你自己stdin的,当然不是为了解决这个问题。shell 通常这样做的方式(无论语言如何)是:用户按下向上箭头,应用程序进入历史模式Shell 删除提示符处的任何内容并将其替换为历史记录中的上一个命令,跟踪当前历史记录索引如果用户在历史模式下按回车,它会获取当前历史索引,并从那里读取命令而不是从标准输入
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go