要するに、このシバンを抽象化して、毎回ファイル名を指定しなくても文字通りコピーして他の .ML ファイルに貼り付けることができるようにしたいと思います。
#!/usr/bin/env ocamlscript -o hello
print_endline "Hello World!"
少し省略してもよいことはわかっていますが、すべてのバイナリにWindows 名 ( ) ではなく-o hello
UNIX 名 ( ) を付けたいと考えています。hello
hello.ml.exe
これを行うには、複雑なシバンが必要です。望ましい動作をする Clojure の例:
":";exec clj -m `basename $0 .clj` $0 ${1+"$@"}
":";exit
Clojure は Javaclj
ベースであるため、ファイルのベース名 (something
ではなくsomething.clj
) が必要です。ベース名を取得するには、複数行のシバンが必要です。単一行のシバンは、単一の単純な静的コマンド ライン引数しか処理できないためです。複数行のシバンを実行するには、次の構文を同時に実行する必要があります。
- シェルコマンドをシェルに送信します
- メイン言語からシェル コマンドを非表示にします
これを行うOCamlのトリックを知っている人はいますか? 私は成功せずに次のことを試しました:
(*
exec ocamlscript -o `basename $0 .ml` $0 ${1+"$@"}
exit
*)
let rec main = print_endline "Hello World!"