我最近使用CentOS 6.3安装了Go到我们的服务器上。安装似乎没有问题。但是我做了一个测试“hello world”脚本,当我运行时,我得到以下输出。
fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
现在运行go env或其他go命令似乎有效。起初我认为这是一个权限问题,但是以root用户身份运行我得到同样的东西。一个
答案 0 :(得分:12)
猜测:你的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身份运行这些命令。正确的设置无需这样做。
答案 1 :(得分:10)
我今天遇到了这个问题,但上面的解决方案没有用。通过简单运行来解决我的问题:
$ export TMPDIR=~/tmp/
然后我能够让脚本运行:
$ go run hello.go
hello, world
唯一的缺点是每次要运行应用程序时都必须运行export TMPDIR
。
答案 2 :(得分:0)
至fix this issue on my Chromebook我刚刚将~/tmp
重新安装为可执行文件。这样做可能会对安全性产生影响,但由于go run
适用于其他平台,我认为它可能并不坏(特别是在本地开发机器上):
sudo mount -i -o remount,exec /tmp/
我将此添加到我的.bash_profile
脚本中。
答案 3 :(得分:0)
我正在使用Fedora 31,并且遇到了类似的错误,这使我到了这里。没有fork/exec
和permission denied
错误,我无法运行Jetbrains IntelliJ Ultimate / GoLand使用的Go调试器。解决方案是这样的:
setsebool deny_ptrace 0
有关详细信息,请参见https://fedoraproject.org/wiki/Features/SELinuxDenyPtrace。
答案 4 :(得分:-5)
考虑尝试:
sudo mount -o remount exec /tmp