在 Linux 中使 Scala 腳本獨立的方法?

在 Linux 中使 Scala 腳本獨立的方法?

斯卡拉編程說:

當你經常使用這些腳本時,用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 中的註釋/*和。)*/

相關內容