Более короткий заголовок скрипта Scala

#shell #scala #scripting #scala-script

#оболочка #scala #сценарии #scala-script

Вопрос:

Можно писать сценарии оболочки в Scala, запустив текстовый файл с:

 #!/bin/sh
exec scala "$0" "$@"
!#
  

Чтобы упростить создание скрипта, я хотел бы написать исполняемый файл с именем scalash (возможно, скрипт BASH), позволяющий сократить заголовок Scala-скрипта до одной строки:

 #!/bin/scalash
  

Возможно ли это? Дополнительные очки, если я могу передать необязательные параметры scalash , например, для добавления зависимостей classpath.

Комментарии:

1. Здесь не уверен, но я думаю, что ограничение строки shebang «только одним параметром » исходит из ОС; не знаю, можно ли что-то с этим сделать.

Ответ №1:

В Scala 2.11 вы можете сделать это следующим образом (точно так же, как и в большинстве других языков):

 #!/usr/bin/env scala
println(args.mkString(" "))
  

В Scala 2.9.0.1 вы можете просто создать следующий скрипт:

test.scala

 #!/usr/bin/scala
!#
println(args.mkString(" "))
  

и сделайте его исполняемым. (измените первую строку на путь к вашему исполняемому файлу)

Использование:

 # ./test.scala Hello world!
Hello world!
  

Комментарии:

1. Вы даже можете создать первую строку #!/usr/bin/env scala . Должно работать до тех пор, пока scala двоичный файл находится внутри PATH , не обязательно внутри /usr/bin/ .

2. @javadba — кажется, вы каким-то образом выбрали неправильный интерпретатор. Можете ли вы вставить свой файл .scala куда-нибудь?

3. @javadba — что произойдет, если вы это сделаете /usr/local/bin/scala /shared/stest.scala ?

4. 2015 сейчас: и в версии 2.11 теперь работает строка «#!/usr /bin / env scala».

5. @javadba — Да, это правда. Спасибо за комментарий, я обновил ответ.

Ответ №2:

Посмотрите этот запрос на извлечение (был ли это). С этим не связано никаких проблем — если вам так хочется, вы можете открыть проблему и прокомментировать запрос на извлечение.

Вы также можете использовать SBT для запуска скриптов. Смотрите информацию scalas здесь .

Редактировать

Запрос на извлечение был принят, так что это должно сработать:

 #!/usr/bin/env /path/to/scala
etc
  

Комментарии:

1. @javadba спасибо. Эта ссылка указывала на старое зеркало репозитория svn, которое было заменено текущим репозиторием git. Я исправил это, а также другую ссылку, которая с тех пор также переместилась.

2. Я надеюсь, что запрос будет принят. Нынешняя ситуация означает, что отладчики сбиты с толку — номера строк уменьшены на количество строк между #! и !#

3. @javadba я добавил больше информации. Запрос на извлечение был принят. Я дополнил ответ синтаксисом, который он допускает.

4. 2015 теперь и в scala 2.11 этот вкладыш работает ОТЛИЧНО.