如何正确复制二进制文件
How to copy binary correcltly
我使用以下代码以编程方式构建二进制文件
二进制文件构建成功但现在我想通过代码将其复制到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
}
问题出在您提供的权限位掩码上:0644
。不包含executable权限,即每组最低位
所以改用0755
,结果文件将被所有人executable:
err = ioutil.WriteFile(dst, data, 0755)
检查 Wikipedia Chmod 位掩码的含义。
相关位掩码table:
# 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
我使用以下代码以编程方式构建二进制文件
二进制文件构建成功但现在我想通过代码将其复制到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
}
问题出在您提供的权限位掩码上:0644
。不包含executable权限,即每组最低位
所以改用0755
,结果文件将被所有人executable:
err = ioutil.WriteFile(dst, data, 0755)
检查 Wikipedia Chmod 位掩码的含义。
相关位掩码table:
# 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