Как создать DSL в Scala для командных строк с минимальным дополнительным шаблоном

Мне нужно разработать API для пользователей, не знакомых со scala (ни Java), но знакомых с Shell. Они, в основном, будут писать сценарии оболочки внутри scala-класса (я знаю, что мог бы просто вызвать внешние сценарии оболочки, но давайте! Кроме того, позже у нас будут некоторые функции для общих задач оболочки)

Я надеялся сделать что-то вроде:

1 object MyCoolScript extends MyMagicTrait {
2   $ "mkdir /tmp/test"
3   $ "cd /tmp/test"
4   $ "wget some-url"   
5 }

Говоря более прямо, как мне преобразовать строки 2-4 (или, возможно, менее краткую версию) в Seq[String], которую я мог бы обработать в MyMagicTrait?

Я знаю о sys.process.stringToProcess, но если у меня есть:

object MyCoolScript extends MyMagicTrait {
  "mkdir /tmp/test" !!
  "cd /tmp/test" !!
  "wget some-url" !!  
}

Как я могу получить результат каждой команды в сжатой форме? Кроме того, я надеялся на нотацию $ "xxx".

Обновление ответов на сообщения:

Спасибо @debilski, @ tenshi и @daniel-c-sobral Мне удалось очень близко подойти к желаемой реализации: https://gist.github.com/2777994

8
задан Johnny Everson 17 June 2013 в 03:36
поделиться