首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.exec.Command和pbcopy

os.exec.Command和pbcopy
EN

Stack Overflow用户
提问于 2015-05-07 08:36:37
回答 1查看 333关注 0票数 0

我试图在go中执行bash命令"hello world" | /usr/bin/pbcopy

代码语言:javascript
复制
package main

import (
    "fmt"
    "os/exec"
    "strings"
)

func Cmd(cmd string) {
    fmt.Println("command is ", cmd)
    parts := strings.Fields(cmd)
    head := parts[0]
    parts = parts[1:len(parts)]
    out, err := exec.Command(head, parts...).Output()
    if err != nil {
        fmt.Printf("%s", err)
    }
    fmt.Println("out")
    fmt.Println(string(out))
}

func main() {
    Cmd(`echo "hello world" | /usr/bin/pbcopy`)
}

当我运行这个go文件时,它会输出:

代码语言:javascript
复制
command is  echo "hello world" | /usr/bin/pbcopy
out
"hello world" | /usr/bin/pbcopy

我希望剪贴板等同于“你好世界”,但事实并非如此。

更新

我试过用io.Pipe

代码语言:javascript
复制
package main

import (
    "bytes"
    "io"
    "os"
    "os/exec"
)

func main() {
    c1 := exec.Command(`echo "hello world"`)
    c2 := exec.Command("/usr/bin/pbcopy")

    r, w := io.Pipe()
    c1.Stdout = w
    c2.Stdin = r

    var b2 bytes.Buffer

    c2.Stdout = &b2

    c1.Start()
    c2.Start()
    c1.Wait()
    w.Close()
    c2.Wait()
    io.Copy(os.Stdout, &b2)
}

..。但是剪贴板仍然不能等同于“你好世界”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-08 00:35:26

Command接受一个可执行文件和一个参数列表。所以当你打电话

代码语言:javascript
复制
exec.Command(`echo "hello world"`)

这实际上是试图运行一个名为echo "hello world"的命令(带有空格和引号)。正如您已经了解到的,exec.Command不会将东西传递给shell,因此“AC.26”也不会以这种方式工作。所以如果你要把stdout和stdin绑在一起,它看起来是这样的:

代码语言:javascript
复制
func main() {
    c1 := exec.Command("echo", "hello world")
    c2 := exec.Command("/usr/bin/pbcopy")

    c1stdout, _ := c1.StdoutPipe()
    c2stdin, _ := c2.StdinPipe()

    c1.Start()
    c2.Start()

    io.Copy(c2stdin, c1stdout)

    c2stdin.Close()
    c2.Wait()
}

但没必要这么做。你有壳。如果你要求的话,它可以帮你做这一切。

代码语言:javascript
复制
func main() {
    exec.Command("sh", "-c", `echo "hello world" | pbcopy`).Run()
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30095870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档