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
)。後者はドキュメント。
(!#
は の対称であり#!
、Scala では によって開かれた「ヘッダー」を閉じるために使用されます。これは、C のコメントのおよび#!
に似た方法です。)/*
*/