2011-10-01 59 views
9

有可能通過啓動一個文本文件,寫在Scala的shell腳本:較短的斯卡拉腳本頭

#!/bin/sh 
exec scala "$0" "[email protected]" 
!# 

爲了緩解劇本創作,我想編寫稱爲scalash一個可執行文件(可能是一個bash腳本)允許將Scala腳本標題縮短爲一行:

#!/bin/scalash 

這可能嗎?如果我可以將可選參數傳遞到scalash,例如添加類路徑依賴關係,則需要加分。

+0

不知道這裏,但我認爲[ 「只有一個參數」(HTTP:// Linux操作系統。 die.net/man/2/execve)shebang行的限制來自操作系統;不知道,你是否可以做些什麼。 – Dirk

回答

17

在斯卡拉2.11,您可以按如下(正好與大多數其他語言)做到這一點:

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

在斯卡拉2.9.0.1,你可以簡單地創建以下腳本:

test.scala

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

並使其可執行。 (第一行路徑更改爲你的可執行文件)

用法:

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

你甚至可以製作第一行'#!/ usr/bin/env scala'。只要'scala'二進制文件在'PATH'中就可以工作,而不一定在'/ usr/bin /'中。 –

+1

我正在運行2.10.2並獲得「第2行:!#:命令未找到」 – javadba

+0

@javadba - 似乎你以某種方式抓住了錯誤的解釋器。你能把你的.scala文件粘貼到什麼地方嗎? – Rogach

8

this pull request(爲this)。沒有與之相關的問題 - 如果您喜歡它,您可以打開問題並對拉取請求發表評論。

您也可以使用SBT來啓動腳本。查看關於scalashere的信息。

編輯

拉請求被接受,所以這應該工作:

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

該鏈接指向完全不相關的拉取請求。 – javadba

+0

@javadba謝謝。該鏈接指向svn存儲庫的舊鏡像,該鏡像已由當前的git存儲庫取代。我已經解決了這個問題,另外還有另一個鏈接,因爲這個鏈接也已經移動了。 –

+0

我希望拉被接受。目前的情況意味着調試人員感到困惑 - 行號與#!之間的行數不同和!# – javadba