簡體   English   中英

Golang:命令提示符

[英]Golang: Command Prompt

我正在編寫一個個人工具,它會給我提示並讓我執行有用的命令。 類似於 bash 但它不是 shell 程序

我想要一個像 Bash 這樣的輸入提示

如果您什么都不輸入,只需打印一個新行並再次掃描輸入如果您輸入熱鍵Ctrl + D ,則終止程序

應該是這樣的

[user@computer ~]$ go build
[user@computer ~]$ ./myapp
$
$ command
   .. do command
$ (Ctrl + D hotkey)
[user@computer ~]$

我嘗試使用 Scanln,但它不接受空格,這是一個大問題

編輯:這是我實施的

func main() {
    var input string 
    fmt.Println(banners.Gecko1)
    fmt.Print("$ ")
    fmt.Scanln(&input)
}

這是控制台:

[user@pc MyTool]$ go build
[user@pc MyTool]$ ./MyTool

-----ENTER COMMANDS 
$ term1 term2 term3 term4 term5
[user@pc MyTool]$ erm2 term3 term4 term5
bash: erm2: command not found
[user@pc MyTool]$ 

如您所見,term1 之后的所有內容都被忽略並以某種方式傳遞給 bash...

我認為這就是 scanln 應該工作的方式。 文檔 state 它“從標准輸入掃描文本,將連續的空格分隔值存儲到連續的 arguments 中。” 或者,如果您想一次讀取一行,請使用 bufio package。 您可以參考下面的示例代碼:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    input_reader := bufio.NewReader(os.Stdin)
    for {
        fmt.Print("$ ")
        line, _ := input_reader.ReadString('\n')
        line = strings.Replace(line, "\n", "", -1)
        fmt.Println(line)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM