从golang内部调用gpg会改变它';行为

从golang内部调用gpg会改变它';行为,go,gnupg,Go,Gnupg,首先,我使用gpg,因为openpgp模块不支持gpg代理 我的问题是: 如果在命令行中运行以下命令,gpg将解密文件并将其内容写入标准输出(如我所希望的): 然后,我从内部运行它,行为发生变化,它将一个同级文件写入asc文件(我已经将exec'd app更改为env并运行它,环境与父级相同(如预期的那样))。我不知道这是Go的东西(我怀疑)还是gpg的东西(我希望它会非常小心它写到哪里): 此后,我在Args中添加了“”--output“,“-”,并且“修复”了它,但我仍然想知道,在同一个sh

首先,我使用gpg,因为openpgp模块不支持gpg代理

我的问题是:

如果在命令行中运行以下命令,gpg将解密文件并将其内容写入标准输出(如我所希望的):

然后,我从内部运行它,行为发生变化,它将一个同级文件写入asc文件(我已经将exec'd app更改为env并运行它,环境与父级相同(如预期的那样))。我不知道这是Go的东西(我怀疑)还是gpg的东西(我希望它会非常小心它写到哪里):


此后,我在Args中添加了“
”--output“,“-”
,并且“修复”了它,但我仍然想知道,在同一个shell环境中,shell和Go产生的程序之间有什么区别。如果输出是否为tty,许多程序会改变它们的行为。您应该从这个问题中删除您的电子邮件。
/usr/bin/gpg --decrypt /home/wwalker/castle_keys.asc
wwalker@hatter:~/golang_workspace/src/devops/play$ ./play

You need a passphrase to unlock the secret key for
user: "Wayne Walker (Ruby Hacker) <wwalker@redacted.com>"
4096-bit ELG-E key, ID 39D0C3D7, created 2007-12-31 (main key ID A62B624A)

File `/home/wwalker/Files/castle_keys' exists. Overwrite? (y/N) 
Enter new filename: asdf
wwalker@hatter:~/golang_workspace/src/devops/play$ cat main.go
// Author wwalker

package main

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

func decryptFile(filename string) ([]byte, error) {
        //cmd := exec.Command("/usr/bin/env")
        var cmd exec.Cmd
        var output bytes.Buffer

        cmd.Path = "/usr/bin/gpg"
        cmd.Args = []string{"--decrypt", filename}
        cmd.Stdout = &output

        if err := cmd.Run(); err != nil {
                return nil, err
        }

        return output.Bytes(), nil
}

func main() {
        bytes, err := decryptFile("/home/wwalker/Files/castle_keys.asc")
        if err == nil {
                fmt.Printf("%s\n", string(bytes))
        }
}