Как правильно скопировать бинарный файл - PullRequest
0 голосов
/ 24 января 2019

Я использую следующий код, который строит двоичный код программно бинарный файл успешно создан , но теперь я хочу скопировать его с помощью кода на 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
}

1 Ответ

0 голосов
/ 24 января 2019

Проблема с предоставленной вами битовой маской разрешения: 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
...