所以我是新手,所以请原谅我的无知。我正在尝试编写一个最小的外壳。为此,我想实现类似于 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 读入。我看了看,但找不到写入该输入的方法。
2 回答

叮当猫咪
TA贡献1776条经验 获得超12个赞
大多数想要实现此行为的软件包都将使用 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”代码。您可以根据自己的经验/限制来决定走哪条路。

呼唤远方
TA贡献1856条经验 获得超11个赞
shell 中没有“输入字段”;根本没有字段。只有一个输入流、一个输出流和一个错误流。你也不想写给你自己stdin
的,当然不是为了解决这个问题。shell 通常这样做的方式(无论语言如何)是:
用户按下向上箭头,应用程序进入历史模式
Shell 删除提示符处的任何内容并将其替换为历史记录中的上一个命令,跟踪当前历史记录索引
如果用户在历史模式下按回车,它会获取当前历史索引,并从那里读取命令而不是从标准输入
- 2 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消