私はshebang #!
をしばらく使っていますが、今日は私を混乱させるユースケースに出くわしました。Shebang "#!" "!#"は終了しますか?
#!/usr/bin/env scala
println("hello world")
のようなScalaのスクリプトを実行するにはいくつかの方法が、このソリューションは、基本的に第1のbashを起動するようにしかし、私はシェバング
#!/bin/sh
exec scala "$0" "[email protected]"
!#
println("hello world")
のこのバージョンに出くわした実行exec scala "$0" "[email protected]"
、ルックスがあります$0
は現在のファイル名を表し、[email protected]
は位置指定配列の引数です。
私の質問それはそれが出てエラーではありませんでしたが、どちらも「そうそう」STDOUTで、誰でもに説明することができ、私に与えた
#!/bin/sh
exec scala "$0" "[email protected]"
echo "oh Yeah"
!#
println("hello world")
bashで実行することができ#!
と!#
間のすべてのものを、どういう意味です私はここで何が起こっているのですか?
更新:!#
はScalaのことですが実現した後、私はスカラ座のソースコードをダウンロードし、それが唯一のレックス・スプーンによって書かれScriptRunner.scala一部のコメントに表示されます実現。
'exec'は、現在のプロセスを新しいプロセスで置き換えます。実行後は何もない。 –
@EtanReisnerの場合、新しいインタプリタ(スカラインタプリタ)は 'println()'から開始し、 'echo'ではなく、'!# 'がどこに使われているのでしょうか? –
つまり、 'exec'の前に置かれていると' echo'を表示させることができます。Perlは、['perldoc perlrun'](http://perldoc.perl.org/perlrun.html)にいくつかの関連する表記法を文書化しています。 –