Обычный трюк - это написать скрипт, который имеет значение на нескольких языках, также известный как скрипт «polyglot».
В случае Bash и Groovy это особенно легко:
#!/bin/sh
//bin/true; exec groovy -cp .. "$0"
println "Hello from Groovy"
- Первая строка - это шебанг (
#!
), который указывает ОС запускать сценарий как обычный сценарий оболочки. - Вторая строка, когда выполняется оболочкойвызывает команду
/bin/true
(без операции);затем находит исполняемый файл groovy в PATH и запускает его в самом файле сценария ("$0"
) плюс дополнительные аргументы, заменяя текущий процесс оболочки (exec
) - Groovy будет игнорировать первую строку, потому что этошебанг;она проигнорирует вторую строку, потому что это комментарий (
//
), и запустит остальную часть скрипта.
Если вам нужна более сложная часть оболочки, возможно, для настройки переменных среды, иличтобы узнать, где установлен Groovy, вы можете воспользоваться другим приемом:
#!/bin/sh
'''':
echo Hello from Shell
exec groovy -cp .. "$0"
'''
println "Hello from Groovy"
- Опять же, shebang подает сигнал ОС, чтобы начать выполнять эти файлы как сценарий оболочки.
- Оболочкапарсит
'''':
как две пустые строки ''
, за которыми следует двоеточие, которое не используется. - Оболочка будет выполнять остальную часть файла построчно, пока не найдет
exec
или exit
- Если все в порядке, оболочка запустит команду Groovy для самого файла сценария (
"$0"
) - Groovy пропустит строку shebang, а затем проанализирует
'''':
как начало длинной строки '''
, пропуская, таким образом, все команды оболочки, а затем запустив оставшуюся часть сценария.