什么!#(反向shebang)意味着什么?

Kok*_*zzu 4 bash scala

从这个链接:http://scala.epfl.ch/documentation/getting-started.html

#!/bin/sh
exec scala "$0" "$@"
!#
object HelloWorld extends App {
  println("Hello, world!")
}
HelloWorld.main(args)
Run Code Online (Sandbox Code Playgroud)

我知道这$0是针对脚本名称,并且$@对于传递给执行的所有参数,但是!#意味着什么(谷歌bash "!#" symbols似乎没有显示结果)?

这是否意味着退出脚本并且stdin来自剩余的行?

oog*_*oga 9

这是scala本身的一部分,而不是bash.注意发生了什么:exec命令替换进程scala,然后读取给定的文件"$0",即bash脚本文件本身.Scala忽略了#!和之间的部分,并将!#其余部分解释为scala程序.他们选择"反向shebang"作为shebang的合适对手.

要了解exec更换流程的含义,请尝试以下简单脚本:

#!/bin/sh
exec ls
echo hello
Run Code Online (Sandbox Code Playgroud)

它不会打印"你好",因为该过程将被替换ls的过程,当exec被执行.

参考:http://www.scala-lang.org/files/archive/nightly/docs-2.10.2/manual/html/scala.html