12

./F# 2.0 を Mono と共にインストールしていますが、F# スクリプトを使用したいと考えています。Mac OS X ではど​​のシバン行を使用すればよいですか? このシバン行は、Mac OS XおよびLinux 用に一般化できますか?

4

3 に答える 3

8

したがって、@ mcandreの回答では、シバンが見つからない場合、ほとんどのシェルがボーンシェルに戻るため、機能します。

その#lightため、有効な F# と bourne シェルのコメントの両方を保持することで、各スクリプト環境が何を理解しているかを確認できます。

ただし、内部のスクリプトは改善される可能性があります。追加するスクリプトを実行する--quiet--exec冗長に見えますが、すべての引数がスクリプトに渡されることも期待されます。より理想的なバージョンはexec fsharpi --exec $0 $*、コマンドを明示的に実行したかのようにすべての引数が渡されるようにすることです。

#lightF# で先行する唯一の#ディレクティブではありません。プリプロセッサの定義も機能し、何が起こっているのかを直感的に理解できます。#if run_with_bin_shと の間にシェル スクリプトを配置すると、定義されない#endifため、f# からは見えなくなります。run_with_bin_sh

例 fsx:

#if run_with_bin_sh 
  exec fsharpi --exec $0 $*
#endif
printfn "%A" fsi.CommandLineArgs

更新:などのリアル シバン サポートが公式の Microsoft F# コード ベース#!/usr/bin/env fsharpi --execに追加されました。したがって、F# の将来のバージョンで動作するはずです。

更新 2: #!/usr/bin/env fsharpi --exec Mac ではうまく機能しますが、Linux では機能しません。Linux は非互換である必要があり#!/usr/bin/fsharpi --exec 、面倒です。

クロスプラットフォームの fsharp シバンが必要な場合。以下が機能します。

#!/bin/sh
#if run_with_bin_sh
  exec fsharpi --exec $0 $*
#endif
于 2014-02-22T02:39:08.660 に答える
8

NOTE fsharpiは に置き換えられましたdotnet fsiこの回答を参照してください。


Mac OS X では、プログラムはfsharpi.

こんにちは.fs:

#light (*
    exec fsharpi --exec $0 --quiet
*)

System.Console.WriteLine "Hello World"
于 2012-11-10T06:06:30.593 に答える