#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 этот вкладыш работает ОТЛИЧНО.