将输入的命令行管道传递给bash解释器

huangapple go评论118阅读模式
英文:

Pipe input command line to bash interpreter

问题

func RunExtern(c *shell.Cmd) (string, os.Error) {
cmd := exec.Command("bash", "-c", c.Cmd()+" "+strings.Join(c.Args(), " "))
out, err := cmd.Output()

  1. return string(out), err

}

英文:

I'm writing a small program with an interpreter, I would like to pipe any command that is not recognized by my shell to bash, and print the output as if written in a normal terminal.

  1. func RunExtern(c *shell.Cmd) (string, os.Error) {
  2. cmd := exec.Command(c.Cmd(), c.Args()...)
  3. out, err := cmd.Output()
  4. return string(out), err
  5. }

this is what I've written so far, but it only executes a program with its args, I would like to send the whole line to bash and get the output, any idea how to do so ?

答案1

得分: 5

例如,要以列的形式列出目录条目,

  1. package main
  2. import (
  3. "exec"
  4. "fmt"
  5. "os"
  6. )
  7. func BashExec(argv []string) (string, os.Error) {
  8. cmdarg := ""
  9. for _, arg := range argv {
  10. cmdarg += `"` + arg + `" `
  11. }
  12. cmd := exec.Command("bash", "-c", cmdarg)
  13. out, err := cmd.Output()
  14. return string(out), err
  15. }
  16. func main() {
  17. out, err := BashExec([]string{"ls", "-C"})
  18. if err != nil {
  19. fmt.Println(err)
  20. }
  21. fmt.Println(out)
  22. }
英文:

For example, to list directory entries in columns,

  1. package main
  2. import (
  3. "exec"
  4. "fmt"
  5. "os"
  6. )
  7. func BashExec(argv []string) (string, os.Error) {
  8. cmdarg := ""
  9. for _, arg := range argv {
  10. cmdarg += `"` + arg + `" `
  11. }
  12. cmd := exec.Command("bash", "-c", cmdarg)
  13. out, err := cmd.Output()
  14. return string(out), err
  15. }
  16. func main() {
  17. out, err := BashExec([]string{`ls`, `-C`})
  18. if err != nil {
  19. fmt.Println(err)
  20. }
  21. fmt.Println(out)
  22. }

huangapple
  • 本文由 发表于 2011年12月22日 10:47:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/8598919.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定