Shebang和Groovy

Nul*_*ice 22 shell groovy shebang

是否可以在文件的开头声明它应该作为Groovy脚本执行?

其他脚本语言的示例:

#!/bin/sh
#!/usr/bin/python
#!/usr/bin/perl
Run Code Online (Sandbox Code Playgroud)

小智 51

这个#!/usr/bin/env groovy
将搜索你的路径寻找groovy来执行脚本

  • 一个限制是你在linux上使用shebang时不能给groovy任何参数(比如classpath).见[这个答案](http://stackoverflow.com/a/8945888/54396). (4认同)

Tob*_*bia 8

一个常见的技巧是编写一个在不止一种语言中有意义的脚本,也称为“多语言”脚本。

对于 Bash 和 Groovy,这特别容易:

#!/bin/sh
//bin/true; exec groovy -cp .. "$0"

println "Hello from Groovy"
Run Code Online (Sandbox Code Playgroud)
  1. 第一行是 shebang ( #!),它告诉操作系统将脚本作为常规 shell 脚本运行。
  2. 第二行,当由 shell 执行时,调用/bin/true命令(无操作);然后在 PATH 中找到 groovy 可执行文件并在脚本文件本身 ( "$0") 加上其他参数上运行它,替换当前的 shell 进程 ( exec)
  3. Groovy 会忽略第一行,因为它是一个shebang;它将忽略第二行,因为它是一个注释 ( //) 并将运行脚本的其余部分。

如果您需要更复杂的 shell 部分,也许是设置环境变量,或者发现 Groovy 的安装位置,您可以使用不同的技巧:

#!/bin/sh
'''':
echo Hello from Shell
exec groovy -cp .. "$0"
'''

println "Hello from Groovy"
Run Code Online (Sandbox Code Playgroud)
  1. 再次,shebang 向操作系统发出信号,开始将这些文件作为 shell 脚本执行。
  2. shell 解析'''':为两个空字符串''后跟一个冒号,这是一个空操作。
  3. shell 将逐行执行文件的其余部分,直到找到一个exec或一个exit
  4. 如果一切正常,shell 将对脚本文件本身运行 Groovy 命令 ( "$0")
  5. Groovy 将跳过 shebang 行,然后将其解析'''':为长字符串的开头''',从而跳过所有 shell 命令,然后运行脚本的其余部分。


Wri*_*ken 5

根据这个你可以使用#!/usr/bin/groovy(如果这是它的位置).您正在寻找的搜索词是shebang(这是第一行的名称).