0

我的 .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 上?

4

1 回答 1

3

#!/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命令移动或复制到绝对路径较短的目录中。

于 2012-07-24T03:11:59.057 回答