我正在尝试执行一个命令,要求输入多个信息,例如,如果您尝试将文件从本地设备复制到我们使用的scp test.txt user@domain:~/
远程设备,然后它要求我们提供密码。我想要的是编写一个go代码,其中我在代码本身中提供了密码,例如pass:='Secret Password'
。同样,我有CLI命令,该命令在其中询问我们诸如IP,名称等几项内容,因此我需要编写代码,在该代码中我声明代码本身中的所有值,而在运行代码时它什么也没问只需从代码中获取所有输入并运行CLI命令,以防将文件复制到远程,当我运行go二进制文件时,不应该要求我输入密码,它应该将文件直接复制到远程决定。
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)
}
}
如果我使用此代码,它将粘贴在user @ domain的密码上:
没有文件复制到远程设备。
答案 0 :(得分:0)
这是满足您要求的足够好的选择。我认为重新发明轮子不是一个好主意。
答案 1 :(得分:0)
一种解决方法是使用命令行标志:
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
这个channel是很好的资源,他曾经在Go团队工作过,并用该语言制作了许多命令行程序来制作大量视频。祝你好运!
答案 2 :(得分:0)
我在尝试通过 golang os/exec
运行 linux cmd.Stdin
时遇到了这个问题。
要实现您想要实现的目标,请尝试将 os.Stdin
设置为 package main
import (
"fmt"
"os"
"os/exec"
)
type cmdWithEnv struct {
pwd string
command string
cmdArgs []string
envs []string
}
func runCommand(s cmdWithEnv) error {
cmd := exec.Command(s.command, s.cmdArgs...)
if len(s.pwd) != 0 {
cmd.Dir = s.pwd
}
env := os.Environ()
env = append(env, s.envs...)
cmd.Env = env
fmt.Printf("%v\n", cmd)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin // setting this allowed me to interact with ncurses interface from `make menuconfig`
err := cmd.Start()
if err != nil {
return err
}
if err := cmd.Wait(); err != nil {
return err
}
return nil
}
func buildPackage() {
makeKernelConfig := cmdWithEnv{
pwd: "linux",
command: "make",
cmdArgs: []string{"-j12", "menuconfig"},
envs: []string{"CROSS_COMPILE=ccache arm-linux-gnueabihf-", "ARCH=arm"},
}
runCommand(makeKernelConfig)
}
func main() {
buildPackage()
}
。这是一个工作示例:
integer