Шебанг и Груви - PullRequest
       21

Шебанг и Груви

21 голосов
/ 30 марта 2011

Можно ли объявить в начале файла, что он должен выполняться как скрипт Groovy?

Примеры для других языков сценариев:

#!/bin/sh
#!/usr/bin/python
#!/usr/bin/perl

Ответы [ 3 ]

49 голосов
/ 30 марта 2011

Это #!/usr/bin/env groovy
будет искать ваш путь в поисках Groovy для выполнения сценария

5 голосов
/ 30 марта 2011

Согласно это вы можете использовать #!/usr/bin/groovy (если это его местоположение). Поисковый термин, который вы ищете - shebang (именно так называется первая строка).

3 голосов
/ 06 июня 2017

Обычный трюк - это написать скрипт, который имеет значение на нескольких языках, также известный как скрипт «polyglot».

В случае Bash и Groovy это особенно легко:

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

println "Hello from Groovy"
  1. Первая строка - это шебанг (#!), который указывает ОС запускать сценарий как обычный сценарий оболочки.
  2. Вторая строка, когда выполняется оболочкойвызывает команду /bin/true (без операции);затем находит исполняемый файл groovy в PATH и запускает его в самом файле сценария ("$0") плюс дополнительные аргументы, заменяя текущий процесс оболочки (exec)
  3. Groovy будет игнорировать первую строку, потому что этошебанг;она проигнорирует вторую строку, потому что это комментарий (//), и запустит остальную часть скрипта.

Если вам нужна более сложная часть оболочки, возможно, для настройки переменных среды, иличтобы узнать, где установлен Groovy, вы можете воспользоваться другим приемом:

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

println "Hello from Groovy"
  1. Опять же, shebang подает сигнал ОС, чтобы начать выполнять эти файлы как сценарий оболочки.
  2. Оболочкапарсит '''': как две пустые строки '', за которыми следует двоеточие, которое не используется.
  3. Оболочка будет выполнять остальную часть файла построчно, пока не найдет execили exit
  4. Если все в порядке, оболочка запустит команду Groovy для самого файла сценария ("$0")
  5. Groovy пропустит строку shebang, а затем проанализирует'''': как начало длинной строки ''', пропуская, таким образом, все команды оболочки, а затем запустив оставшуюся часть сценария.
...