我遇到了一些奇怪的权限被拒绝错误,我不知道这些错误可能来自哪里。
$ go run .
Hello from go
Run Code Online (Sandbox Code Playgroud)
$ make run
go run .
make: go: Permission denied
make: *** [Makefile:2: run] Error 127
Run Code Online (Sandbox Code Playgroud)
$ make run2
echo "Make says hello" ; go run .
Make says hello
Hello from go
Run Code Online (Sandbox Code Playgroud)
$ cat Makefile
run:
go run .
run2:
echo "Make says hello" ; go run .
Run Code Online (Sandbox Code Playgroud)
$ cat main.go
package main
import "fmt"
func main() {
fmt.Println("Hello from go")
}
Run Code Online (Sandbox Code Playgroud)
我的终端是在 Ubuntu 22.04 上运行的 bash。
我的目标和直接运行 go 之间有什么区别run,可能会导致权限被拒绝错误?
run允许run2它在一个中工作但在另一个中不起作用之间有什么区别?
编辑:使用-d/运行 make--trace
$ make -d run
<...snip...>
No need to remake target 'Makefile'.
Updating goal targets....
Considering target file 'run'.
File 'run' does not exist.
Finished prerequisites of target file 'run'.
Must remake target 'run'.
go run .
make: go: Permission denied
make: *** [Makefile:2: run] Error 127
Run Code Online (Sandbox Code Playgroud)
$ make --trace run
Makefile:2: target 'run' does not exist
go run .
make: go: Permission denied
make: *** [Makefile:2: run] Error 127
Run Code Online (Sandbox Code Playgroud)
$ make --trace run2
Makefile:5: target 'run2' does not exist
echo "Make says hello"; go run .
Make says hello
Hello from go
Run Code Online (Sandbox Code Playgroud)
Mad*_*ist 10
这是由于 GNU make 中的一个错误(实际上是 gnulib 中的一个错误)造成的。这意味着您的某个目录中有一个名为 , 的目录(在包含可执行文件的实际目录之前)。goPATHgo
因此,如果您有一个目录 /usr/bin/go/.并且您/usr/bin的 上有一个PATH目录,您就会看到这个问题。
您应该检查PATH并确保删除包含此类子目录的任何目录。如果您无法从您的目录中删除该目录PATH(需要包含子目录的目录是不常见的,PATH但我想这是可能的)并且您无法将该go目录重命名为其他目录,则必须确保 GNU make 调用 shell ,通过添加特殊字符。就;足够了:
run:
go run . ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5846 次 |
| 最近记录: |