在 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 中的注释/*和。)*/

相关内容