我在Mono上安装了F#2.0,我想./
我的F#脚本。我应该在Mac OS X上使用哪个shebang系列?这个shebang系列能否适用于Mac OS X 和 Linux?
答案 0 :(得分:9)
在Mac OS X中,程序为fsharpi
。
hello.fs:
#light (*
exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"
答案 1 :(得分:8)
所以,在@ mcandre的回答中,它起作用的原因是most shells revert to bourne shell当他们找不到一个shebang时。
因此,#light
有效F#和bourne shell中的注释允许每个脚本环境看到它理解的内容。
然而内部的脚本可以改进。当我们执行一个脚本时,将--quiet
添加到--exec
似乎是多余的,我们也希望所有参数都传递给脚本。更理想的版本是exec fsharpi --exec $0 $*
,因此所有参数都将被传递,就像您明确地运行命令一样。
#light
不是F#中唯一的#
前置指令。预处理器定义也可以工作,并且可以直观地了解正在发生的事情。在#if run_with_bin_sh
和#endif
之间放置一个shell脚本对于f#是不可见的,因为run_with_bin_sh
不会被定义。
示例fsx:
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
printfn "%A" fsi.CommandLineArgs
更新: #!/usr/bin/env fsharpi --exec
等真正的shebang支持已添加到official Microsoft F# code base。所以它应该适用于F#的未来版本。
更新2: #!/usr/bin/env fsharpi --exec
适用于mac,但不适用于Linux。 Linux需要#!/usr/bin/fsharpi --exec
the incompatibilty is annoying.
如果你想要一个跨平台fsharp shebang。以下将有效。
#!/bin/sh
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
答案 2 :(得分:0)
安装了最新的跨平台.net以及最新的linux(coreutil 8.30 <=)和bsd / mac os版本。您可以将以下shebang用于F#.fsx
脚本。
#!/usr/bin/env -S dotnet fsi