如何正确地复制二进制文件

3
我使用以下代码来通过程序构建二进制文件。 二进制文件已成功构建,但现在我想通过代码将其复制到go/bin路径,并且我已经成功实现了它,但是它只能复制文件而无法作为可执行文件运行
可能出了什么问题?源文件是可执行的
bPath := filepath.FromSlash("./integration/testdata/" + fileName)
cmd := exec.Command("go", "build", "-o", bPath, ".")
cmd.Dir = filepath.FromSlash("../")
err := cmd.Run()
if err != nil {
    fmt.Println("binary creation failed: ", err)
}

fmt.Println(os.Getenv("GOPATH"))
dir, _ := os.Getwd()
srcPath := filepath.Join(dir, "testdata", , fileName)
targetPath := filepath.Join(os.Getenv("GOPATH"),"/bin/",fileName)
copy(srcPath, targetPath)

这段内容是:

func copy(src string, dst string) error {
    // Read all content of src to data
    data, err := ioutil.ReadFile(src)
    if err != nil {
        return err
    }
    // Write data to dst
    err = ioutil.WriteFile(dst, data, 0644)
    if err != nil {
        return err
    }

    return nil
}

这是在Linux上吗? - jcfollower
1
使用io.Copy来完成此任务。 - Sebastian Waldbauer
@jcfollower - 是的,在Linux和Mac上也是这样。 - NSS
1个回答

9
问题出在你提供的权限掩码上:0644。它不包括可执行权限,这是每个组中最低的位。
因此,请改用0755,这样结果文件将成为每个人都可执行的。
err = ioutil.WriteFile(dst, data, 0755)

请查看维基百科Chmod以了解比特掩码的含义。

相关的比特掩码表格:

#    Permission               rwx    Binary
-------------------------------------------
7    read, write and execute  rwx    111
6    read and write           rw-    110
5    read and execute         r-x    101
4    read only                r--    100
3    write and execute        -wx    011
2    write only               -w-    010
1    execute only             --x    001
0    none                     ---    000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接