Как выполнить интерактивную команду CLI в Голанге? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь выполнить команду, которая запрашивает несколько входных данных, например, если вы пытаетесь скопировать файл с локального устройства на удаленное устройство, которое мы используем scp test.txt user@domain:~/, то оно запрашивает у нас пароль.Я хочу написать код go, в котором я предоставляю пароль в самом коде, например pass:='Secret Password'.Точно так же у меня есть команда CLI, где она запрашивает у нас несколько вещей, таких как IP, имя и т. Д., Поэтому мне нужно написать код, в котором я просто объявляю все значения в самом коде, и когда я запускаю код, он ничего не спрашиваетпросто возьмите все входные данные из кода и выполните команду CLI в случае копирования файла на удаленный компьютер, он не должен запрашивать у меня пароль при запуске моего двоичного файла, он должен напрямую копировать мой файл для удаленного принятия решения.

func main() {
    cmd := exec.Command("scp", "text.txt", "user@domain:~/")        
    stdin, err := cmd.StdinPipe()
    if err = cmd.Start(); err != nil {
        log.Fatalf("failed to start command: %s", err)
    }
    io.WriteString(stdin, "password\n")
    if err = cmd.Wait(); err != nil {
    log.Fatalf("command failed: %s", err)
    }
}

Если я использую этот код, он привязан к паролю пользователя @ домена:

И файл не копируется на удаленное устройство.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Один из способов сделать это - использовать флаги командной строки:

package main

import (
    "flag"
    "fmt"
    "math"
)

func main() {
    var (
        name = flag.String("name", "John", "Enter your name.")
        ip   = flag.Int("ip", 12345, "What is your ip?")
    )
    flag.Parse()
    fmt.Println("name:", *name)
    fmt.Println("ip:", *ip)
}

Теперь вы можете запустить программу с флагами name и ip:

go run main.go -name="some random name" -ip=12345678910`
some random name
ip: 12345678910

Этот канал - хороший ресурс - он работал в команде Go и делал тонны видеороликов по разработке программ командной строки на языке.Удачи!

0 голосов
/ 30 января 2019

https://github.com/manifoldco/promptui

Это достаточно хороший выбор для удовлетворения ваших требований.Я думаю, что не стоит изобретать велосипед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...