斯卡拉編程說:
當你經常使用這些腳本時,用scala呼叫腳本是很乏味的。在 Windows 和類別 Unix 系統上,您可以建立獨立的 Scala 腳本,不需要使用 scala 腳本檔案名稱呼叫。對於類別 Unix 系統,以下範例示範如何製作可執行腳本。請記住,您必須使權限可執行,例如 chmod +x secho:
#!/bin/sh # src/main/scala/progscala2/toolslibs/secho exec scala "$0" "$@" !# print("You entered: ") args.toList foreach { s => printf("%s ", s) } println
以下是您可以如何使用它:
$ secho Hello World You entered: Hello World
我想知道這是什麼意思
# src/main/scala/progscala2/toolslibs/secho
exec scala "$0" "$@"
!#
在sh
?
我可以使 Scala 腳本獨立為
#!/path/to/scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
在 Linux 上?
謝謝!
答案1
在sh
,
# src/main/scala/progscala2/toolslibs/secho
是評論,被忽略;
exec scala "$0" "$@"
導致目前進程將自身替換為scala
, 並將所有 shell 參數作為參數;
!#
沒有任何效果,因為 shell 此時已停止讀取腳本。
然而,Scala 透過忽略文件開頭的「標頭」來處理腳本文件;該標頭從以#!
(或在 Windows 上)開頭的行開始::#!
,並以行結束匹配!#
( ::!#
) 或/env
。標題可以是單行,所以兩者
#!/path/to/scala
!#
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
和
#!/usr/bin/env scala
print("You entered: ")
args.toList foreach { s => printf("%s ", s) }
println
工作(後者需要scala
在 上PATH
)。後者對應於文件。
(!#
是 , 的對稱#!
,在 Scala 中用於關閉由 , 打開的“標題” #!
,其方式類似於C 中的註釋/*
和。)*/