我的 .sh 文件中有以下几行
#! /usr/bin/env /Users/myuser/Development/tools/groovy
println "this is a test"
env:/Users/myuser/tools/groovy:权限被拒绝
当我运行命令 /usr/bin/env groovy 时,我没有收到任何错误。任何线索为什么它会发生在 OS X 上?
该#!/usr/bin/env
技巧的目的是避免必须指定解释器的完整路径。有关更多信息,请参阅此问题(和我的答案)。由于您无论如何都指定了完整的绝对路径,因此您不妨使用:
#!/Users/myuser/Development/tools/groovy
至于为什么这不起作用,很可能你groovy
在你的其他地方有一个命令$PATH
,并且/usr/bin/env groovy
正在调用另一个副本。
这:
type -a groovy
会告诉你哪个groovy
可执行文件在你的$PATH
. 还有这个:
ls -l /Users/myuser/Development/tools/groovy
应该告诉您为什么会收到“权限被拒绝”错误;该文件很可能是不可执行的。
#!
另一种可能性:一些系统限制了一条线的长度。我不知道 OSX 是否这样做。如果是这样,您的groovy
命令的路径可能会被截断。如果这是问题所在,您可能会考虑将groovy
命令移动或复制到绝对路径较短的目录中。