为什么Scala使用反向shebang(!#)而不是仅仅将解释器设置为scala

zst*_*art 10 bash scala sh

scala文档显示创建scala脚本的方式如下:

#!/bin/sh
exec scala "$0" "$@"
!#
/* Script here */
Run Code Online (Sandbox Code Playgroud)

我知道这会执行scala,其中包含脚本文件的名称和传递给它的参数,并且scala命令显然知道要读取一个以这样的方式启动的文件并忽略所有内容直到反向的shebang !#

我的问题是:我有什么理由为scala脚本使用这种(相当冗长的)格式,而不仅仅是:

#!/bin/env scala
/* Script here */
Run Code Online (Sandbox Code Playgroud)

从快速测试中可以看出,这一点完全相同,但不那么冗长.

Wil*_*ell 3

文档有多旧了?通常,这种事情(通常称为“exec hack”)在很/bin/env常见之前就被推荐过,这是获得该功能的最佳方式。请注意,/usr/bin/env比 , 更常见/bin/env,应该使用 , 来代替。

  • 当 Scala 被发明时,`/usr/bin/env`(它是`/usr/bin/env`,而不是`/bin/env`)已经牢固地建立了十多年,我怀疑是否有任何平台Scala 和 shebang 可以工作,但 `/usr/bin/env` 不能工作。 (2认同)