登录
首页 >  Golang >  Go问答

如何包装交互式命令

来源:Golang技术栈

时间:2023-03-06 14:07:28 205浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《如何包装交互式命令》,就坚持看下去吧!文中内容包含golang等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我正在构建一个 ftp 包装器,它在生成之前会做一些事情,我可以很容易地在 shell 脚本中做到这一点,但想知道如何在 go 中做到这一点

而 exec.Command 适用于简单的命令。

out, err := exec.Command("ls").Output() // Works

如何包装交互式命令,例如 ftp

out, err := exec.Command("ftp").Output()

它只是退出。我该如何处理标准输入?

例如,bash 等价物:

> ./t.sh 
Welcome to myftp 

ftp> open blahblah.com

> cat t.sh 
#!/bin/bash
echo "Welcome to myftp "
#extra commands such as auth/authoriz.. etc.,
shift
echo "$@"
ftp

c++ 等价物:

int main() {
    system("ftp");
    return 0;
}

正确答案

我可能会做这样的事情,它更原生并且不涉及外部包

package main
import (
    "os"
    "os/exec"
)

func main() {

    cmd := exec.Command("ls")
    // redirect the output to terminal
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    cmd.Run()

}

本篇关于《如何包装交互式命令》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表