Скрипты Scala в пакетных файлах Windows - PullRequest
9 голосов
/ 13 июля 2011

В разделе «Программирование в Scala» приводится описание того, как запускать сценарии Scala из пакетных файлов ( ссылка ).

Для Windows

  ::#!
  @echo off
  call scala %0 %*
  goto :eof
  ::!#

У меня проблема с поиском в Google ::#!. Что это значит? Я знаю, что :: обозначает комментарий, а в Unix #! - это направление к оболочке, которая используется, но что именно здесь? И ::!#?

Что именно означает %0 %*, и нужно ли это выражать так?

Можно ли запустить несколько сценариев из одного пакетного файла?

Ответы [ 2 ]

15 голосов
/ 13 июля 2011

Это трюк, но он работает. Он намеревается повторить способность оболочки Unix вызывать определенную команду для обработки файла оболочки. Итак, вот объяснение:

::#!

Строки, начинающиеся с ::, являются комментариями в оболочке Windows, поэтому это просто комментарий.

@echo off

Не показывать строки, выполненные с этого момента. @ в начале гарантирует, что сама эта строка не будет показана.

call scala %0 %*

Перенос выполнения в сценарий scala. %0 означает имя самого файла (чтобы scala мог его найти), а %* - параметры, которые были переданы при его выполнении.

Например, скажем, эти строки находятся в файле с именем count.bat, и вы вызвали его, набрав count 1 2 3. В этом случае эта строка выполнит scala count 1 2 3 - в этом случае вы получите ошибку. Вы должны вызвать его, набрав count.bat.

goto :eof

Завершить выполнение скрипта.

::!#

Еще одна строка комментария.

Итак, вот хитрость ... Однажды вызванный Scala найдет файл, переданный в качестве первого аргумента, проверит, является ли первая строка ::#!, проигнорирует все до строки ::!#, если так, и затем выполнить оставшуюся часть файла (строки после ::!#) как скрипт Scala.

Другими словами, умная оболочка не Windows, а Scala. : -)

2 голосов
/ 13 июля 2011

% 0 указывает на имя программы (возможно, имя файла скрипта),% * указывает на список параметров командной строки. % 1 означает первый параметр ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...