我已经在Mono中安装了F# 2.0,我想要./我的F#脚本。对于Mac,我应该使用哪一行?这条线能推广到Mac和Linux吗?
发布于 2014-02-22 02:39:08
所以,在@mcandre的回答中,它起了作用,因为大多数shell恢复为bourne shell。在他们找不到她的时候。
因此,有了#light (它既是有效的F#,又是bourne中的注释),每个脚本环境都可以查看它理解的内容。
但是,内部的脚本可以改进。当我们执行一个将--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更新: Real支持(如#!/usr/bin/env fsharpi --exec )已经添加到官方微软F#代码库中。因此,它应该适用于未来版本的F#。
更新2: #!/usr/bin/env fsharpi --exec对mac非常有用,但在linux上却不行。Linux需要是#!/usr/bin/fsharpi --exec 这种不相容是令人讨厌的。
如果你想要一个交叉平台的话。以下内容将有效。
#!/bin/sh
#if run_with_bin_sh
  exec fsharpi --exec $0 $*
#endif发布于 2012-11-10 06:06:30
注意到 fsharpi已经被dotnet fsi取代了。见这个答案。
在Mac中,程序是fsharpi。
hello.fs:
#light (*
    exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"发布于 2020-09-18 05:01:01
安装了最新的跨平台.net和最新的linux (coreutil 8.30 <=)和bsd / mac os版本。您可以对F# .fsx脚本使用下面的shebang。
#!/usr/bin/env -S dotnet fsihttps://stackoverflow.com/questions/13319632
复制相似问题