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すべてのシェル引数を引数に置き換えます。

!#

この時点で、シェルがスクリプトの読み取りを停止したため、何の効果もありません。

しかし、Scalaはファイルの先頭の「ヘッダ」を無視してスクリプトファイルを処理します。このヘッダーは#!(またはWindowsの場合)行で始まり::#!、次に終わります。一致!#::!#)または/env。タイトルは1行だけです。

#!/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)。後者は次のとおりです。文書

(スカラーでは、注釈とCの.と同様の方法でによって開かれた「タイトル」を閉じるために使用されるの!#対称です。)#!#!/**/

関連情報