Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在Go中传输命令时从控制台读取_Shell_Go_Command Line - Fatal编程技术网

Shell 在Go中传输命令时从控制台读取

Shell 在Go中传输命令时从控制台读取,shell,go,command-line,Shell,Go,Command Line,我需要一种从控制台读取两次输入的方法(1-从catoutupt,2-用户输入密码),如下所示: cat./test_data/test.txt|应用程序帐户导入 我的当前代码跳过密码输入: reader := bufio.NewReader(os.Stdin) raw, err := ioutil.ReadAll(reader) if err != nil { return cli.NewExitError(err.Error(), 1) } wlt, err := wallet.De

我需要一种从控制台读取两次输入的方法(1-从
cat
outupt,2-用户输入密码),如下所示:
cat./test_data/test.txt|应用程序帐户导入

我的当前代码跳过密码输入:

reader := bufio.NewReader(os.Stdin)
raw, err := ioutil.ReadAll(reader)
if err != nil {
    return cli.NewExitError(err.Error(), 1)
}

wlt, err := wallet.Deserialize(string(raw))
if err != nil {
    return cli.NewExitError(err.Error(), 1)
}

fmt.Print("Enter password: ")
pass := ""
fmt.Fscanln(reader, &pass)
还尝试使用
Scanln
读取密码-无效

注意
cat
(以及管道)不能与用户输入一起使用,因为shell完全重定向输入。 因此,最简单的解决方案是:

  • 将文件名作为参数传递

  • 手动重定向应用程序帐户导入<./test.txt


分别读取文件和密码(不显示密码),请尝试以下操作:

package main

import (
    "fmt"
    "io/ioutil"
    "log"

    "github.com/howeyc/gopass"
)

func main() {
    b, err := ioutil.ReadFile("./test_data/test.txt") // just pass the file name
    if err != nil {
        fmt.Print(err)
    }
    fmt.Println(string(b))

    fmt.Print("Password: ")
    pass, err := gopass.GetPasswd()
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(pass))
}

然后
先获取github.com/howeyc/gopass

是的,我已经使用
terminal.ReadPassword(0)
来隐藏密码。但我需要在shell管道中使用我的应用程序的选项OK,所以你们需要从std中读取,那个么你们如何将文件数据和密码分开呢?这是一个输入流,不是吗?当从一个流中读取数据时,您需要检测第一个数据结束和第二个数据开始,这意味着同步头。可能是您编写了第二个程序,如
cat
,它从一个文件中读取,并从std-in请求密码,然后使用格式化帧和sync将输出发送到std-out。我希望这有帮助。如果你正在从终端读取密码,看起来一切都正常。你们还有问题吗?我忘了,在管道传输过程中,并没有办法中断stdin从键盘输入密码。因此,可能的选项只是使用文件名