f# - usar - teclado mac desconfigurado
¿Qué shebang debería usar para las secuencias de comandos F#en Mac OS X? (2)
En Mac OS X, el programa es fsharpi
.
hello.fs:
#light (*
exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"
Tengo F # 2.0 instalado con Mono, y me gustaría ./
mis scripts F #. ¿Qué línea de shebang debería usar para Mac OS X? ¿Puede esta línea shebang generalizarse para Mac OS X y Linux?
Por lo tanto, en la respuesta de @ mcandre, funciona porque la mayoría de las conchas vuelven al caparazón de bourne cuando no encuentran un shebang.
Así que tener #light
que es tanto F # válido como un comentario en bourne shell permite que cada entorno de scripting vea lo que entiende.
Sin embargo, el guión adentro podría mejorarse. Cuando ejecutamos un script que agrega --quiet
to --exec
parece redundante, también esperamos que todos los argumentos pasen al script. Una versión más ideal sería exec fsharpi --exec $0 $*
para que todos los argumentos se pasen como si ejecutara el comando explícitamente.
#light
no es la única directiva #
precedida en F #. El preprocesador define también funcionaría y podría ser intuitivo para lo que está sucediendo. Poner un script de shell entre #if run_with_bin_sh
y #endif
sería invisible para f #, ya que run_with_bin_sh
no se definiría.
Ejemplo fsx:
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
printfn "%A" fsi.CommandLineArgs
Actualización: El soporte real de shebang como #!/usr/bin/env fsharpi --exec
se ha agregado a la base de código oficial de Microsoft F # . Por lo tanto, debería funcionar con versiones futuras de F #.
actualización 2: #!/usr/bin/env fsharpi --exec
funciona muy bien para mac, pero no en Linux. Linux necesita ser #!/usr/bin/fsharpi --exec
la incompatibilidad es molesta.
Si quieres una plataforma cruzada, fsharp shebang. Lo siguiente funcionará.
#!/bin/sh
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif