Shell shebang groovy给定错误

Shell shebang groovy给定错误,shell,groovy,Shell,Groovy,我的.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诀窍是避免必须指定interpeter的完整路径。有关更多信息,请参见(和)。

我的.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
诀窍是避免必须指定interpeter的完整路径。有关更多信息,请参见(和)。由于您仍要指定完整的绝对路径,因此最好使用:

#!/Users/myuser/Development/tools/groovy
至于这不起作用的原因,很可能您在
$PATH
的其他地方有一个
groovy
命令,并且
/usr/bin/env groovy
正在调用另一个副本

这:

将告诉您
$PATH
中有哪个
groovy
可执行文件。这是:

ls -l /Users/myuser/Development/tools/groovy
应该告诉您为什么会出现“权限被拒绝”错误;该文件很可能不是可执行文件

另一种可能性:一些系统限制
#的长度行。我不知道OSX是否这样做。如果是这样的话,
groovy
命令的路径可能会被截断。如果是这个问题,您可以考虑将<代码> Groovy < /C>命令复制到具有绝对路径较短的目录中。

< P>usr/bin/env
诀窍是避免必须指定interpeter的完整路径。有关更多信息,请参见(和)。由于您仍要指定完整的绝对路径,因此最好使用:

#!/Users/myuser/Development/tools/groovy
至于这不起作用的原因,很可能您在
$PATH
的其他地方有一个
groovy
命令,并且
/usr/bin/env groovy
正在调用另一个副本

这:

将告诉您
$PATH
中有哪个
groovy
可执行文件。这是:

ls -l /Users/myuser/Development/tools/groovy
应该告诉您为什么会出现“权限被拒绝”错误;该文件很可能不是可执行文件


另一种可能性:一些系统限制
#的长度行。我不知道OSX是否这样做。如果是这样的话,
groovy
命令的路径可能会被截断。如果这是问题,您可以考虑将<代码> Groovy < /C>命令复制到具有绝对路径较短的目录。

我复制了您的示例,它在这里工作(107.4)。你检查了你的权限吗?我复制了你的例子,它在这里工作(10.7.4)。您检查了权限吗?以及
键入-a groovy
哪个groovy
会告诉您它的路径。可能更容易记住。@doelleri:
类型-a
的信息量可能会更大一些<代码>它不报告别名或函数。谢谢你的帮助。没有多个版本,但我有一个别名,它实际上指向实际的二进制文件。当我把它改为使用实际的二进制时,它工作了。除了
type-a groovy
哪个groovy
会告诉你它的路径。可能更容易记住。@doelleri:
类型-a
的信息量可能会更大一些<代码>它不报告别名或函数。谢谢你的帮助。没有多个版本,但我有一个别名,它实际上指向实际的二进制文件。当我把它改成使用实际的二进制时,它起了作用。