实现一个简单的命令行
- 使用go实现一个简单的命令行,可以使用第三方库""github.com/urfave/cli""
- 调用系统命令可以使用go自带的库exec.Command
示例1
package main
import (
"github.com/urfave/cli"
"fmt"
"os"
"github.com/gpmgo/gopm/modules/log"
"os/exec"
)
func main(){
app := cli.NewApp()
app.Name = "cmd"
app.Usage = "cmd ls"
app.Action = func(context *cli.Context)error{
cmd := exec.Command(context.Args().Get(0))
rst,err :=cmd.Output()
if err != nil {
log.Fatal("err %s",err)
}
fmt.Printf(string(rst))
}
err := app.Run(os.Args)
if err != nil {
log.Info("err:%s\n",err)
}
}
示例2
package main
import (
"github.com/urfave/cli"
"fmt"
"os"
"os/exec"
)
func Run(command string) *exec.Cmd {
cmd := exec.Command(command)
rst,err :=cmd.Output()
if err != nil {
fmt.Printf("err: %s",err)
}
fmt.Printf("rst=%s\n",rst)
return cmd
}
var runCommand=cli.Command{
Name:"run",
Usage: `create a container mydocker run -ti`,
Action: func(context *cli.Context) error{
cmd := context.Args().Get(0)
Run(cmd)
return nil
},
}
func main() {
app :=cli.NewApp()
app.Name = "mydocker"
app.Usage = "mydocker study. mydocker is a simple container runtime implementation"
app.Commands = []cli.Command{
runCommand,
}
fmt.Printf("main func os.Args=%s",os.Args)
app.Run(os.Args)
}
网友评论