斯卡拉编程说:
当你经常使用这些脚本时,用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 中的注释/*
和。)*/