我最近使用 CentOS 6.3 在我们的服务器上安装了 Go。安装似乎很顺利。但是,我制作了一个测试“hello world”脚本,当我运行时,我得到以下输出。
fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
现在运行 go env 或其他 go 命令似乎可以工作。起初我认为这是一个权限问题,但是以 root 用户身份运行我得到了同样的结果。一个
我最近使用 CentOS 6.3 在我们的服务器上安装了 Go。安装似乎很顺利。但是,我制作了一个测试“hello world”脚本,当我运行时,我得到以下输出。
fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
现在运行 go env 或其他 go 命令似乎可以工作。起初我认为这是一个权限问题,但是以 root 用户身份运行我得到了同样的结果。一个
我今天遇到了这个问题,但上面的解决方案不起作用。我通过简单地运行来修复:
$ export TMPDIR=~/tmp/
然后我能够让脚本运行:
$ go run hello.go
hello, world
唯一的缺点是export TMPDIR
每次要运行应用程序时都必须运行。
只是猜测:出于安全原因,您的 nix 可能会禁用在 /tmp 中执行程序。它可能在 CentOS 中是可配置的,但我不知道。
另一种解决方案:您似乎正在尝试go run
执行 Go 程序(它就像 C 是脚本一样的脚本)。尝试(假设$GOPATH=~
,简单的可能性)而不是正常的构建,即而不是
me:~/src/foo$ go run main.go
尝试
me:~/src/foo$ go build # main.go should not be necessary here
me:~/src/foo$ ./foo
这种方法仍将使用 /tmp-whatever 创建二进制文件 IIRC,但它不会尝试从那里执行它。
PS:不要以root身份运行这些命令。无需正确设置。
我正在使用 Fedora 31 并遇到了类似的错误,导致我来到这里。我无法运行 Jetbrains IntelliJ Ultimate/GoLand 使用的 Go 调试器而没有出现fork/exec
&permission denied
错误。解决方案是这样的:
setsebool deny_ptrace 0
有关详细信息,请参阅https://fedoraproject.org/wiki/Features/SELinuxDenyPtrace。
为了在我的 Chromebook 上解决这个问题,我刚刚重新安装/tmp
为可执行文件。这样做可能会带来安全隐患,但由于go run
可以在其他平台上工作,我认为这可能还不错(尤其是在本地开发机器上):
sudo mount -i -o remount,exec /tmp/
我将此添加到我的.bash_profile
脚本中。
exec.Command 返回这个结构:输入 Cmd
标准评论:</p>
// Dir specifies the working directory of the command.
// If Dir is the empty string, Run runs the command in the
// calling process's current directory.
Dir string
所以解决,您可以将 exec cmd 的路径传递给 exec 自己的命令:
cmd := exec.Command(xxxxx)
cmd.Dir = xxxxPath
然后你可以调用 Run() 或其他 Output() 函数
考虑尝试:
sudo mount -o remount exec /tmp