为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
ITMISS 2022-06-06 15:50:52
所以我是新手,所以请原谅我的无知。我正在尝试编写一个最小的外壳。为此,我想实现类似于 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 库的(修改后的副本)。考虑以下两个选项之一:

第一条路径将为您提供防战的 ReadLine 库,但需要构建“C”代码。您可以根据自己的经验/限制来决定走哪条路。


查看完整回答
反对 回复 2022-06-06
?
呼唤远方

TA贡献1856条经验 获得超11个赞

shell 中没有“输入字段”;根本没有字段。只有一个输入流、一个输出流和一个错误流。你也不想写给你自己stdin的,当然不是为了解决这个问题。shell 通常这样做的方式(无论语言如何)是:

  • 用户按下向上箭头,应用程序进入历史模式

  • Shell 删除提示符处的任何内容并将其替换为历史记录中的上一个命令,跟踪当前历史记录索引

  • 如果用户在历史模式下按回车,它会获取当前历史索引,并从那里读取命令而不是从标准输入


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号