Ich habe F # 2.0 mit Mono installiert, und ich möchte ./
meine F # Skripte. Welche Shebang-Zeile sollte ich für Mac OS X verwenden? Kann diese Shebang-Linie für Mac OS X und Linux verallgemeinert werden?Welchen Shebang sollte ich für F # Skripte in Mac OS X verwenden?
Antwort
So in der Antwort des @ mcandre, es funktioniert, weil most shells revert to bourne shell wenn sie keine shebang finden.
Also mit #light
, die beide gültig ist F # und ein Kommentar in Bourne Shell ermöglicht jeder Skriptumgebung zu sehen, was es versteht.
Das Skript im Inneren könnte jedoch verbessert werden. Wenn wir ein Skript ausführen, das --quiet
zu --exec
hinzufügt, scheint es überflüssig, wir erwarten auch, dass alle Argumente an das Skript übergeben werden. Eine idealere Version wäre exec fsharpi --exec $0 $*
, also würden alle Argumente so übergeben, als ob Sie den Befehl explizit ausgeführt hätten.
#light
ist nicht die einzige vorangegangene Direktive in F # . Präprozessordefinitionen würden auch funktionieren und könnten intuitiv sein, was vor sich geht. Das Einfügen eines Shell-Skripts zwischen #if run_with_bin_sh
und #endif
wäre für f # unsichtbar, da run_with_bin_sh
nicht definiert wäre.
Beispiel FSX:
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
printfn "%A" fsi.CommandLineArgs
Update: Echt shebang Unterstützung wie #!/usr/bin/env fsharpi --exec
wurde in den official Microsoft F# code base hinzuzufügen. Es sollte also mit zukünftigen Versionen von F # funktionieren.
Update 2:#!/usr/bin/env fsharpi --exec
funktioniert gut für Mac, aber nicht auf Linux. Linux muss #!/usr/bin/fsharpi --exec
sein the incompatibilty is annoying.
Wenn Sie eine Cross-Plattform fsharp Shebang wollen. Folgendes wird funktionieren.
#!/bin/sh
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
In Mac OS X ist das Programm fsharpi
.
hello.fs:
#light (*
exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"
- 1. Shell-Skripte in Mac OS X laufen vom Home-Verzeichnis?
- 2. SetWindowsHookEx für Mac OS X?
- 3. Lua kompilierte Skripte unter Mac OS X - Intel vs PPC
- 4. ldconfig für Mac OS X
- 5. Mac OS X: Wo sollte ich allgemeine Anwendungsdaten speichern?
- 6. Welchen Fehlerwert sollte ich verwenden?
- 7. Verwenden von virtualenv auf Mac OS X
- 8. Sollte ich Linux-Treiber auf Mac OS X portieren ODER sollte ich es umschreiben
- 9. Fehler-Tracking-Software für Mac OS X
- 10. auf Mac OS X
- 11. .NET-Anwendung für Mac OS X-Anwendung?
- 12. Mac OS X Ersatz für NSFetchedResultsController
- 13. Commodore 64-Entwicklungstools für Mac OS X
- 14. Welchen Wortstammer sollte ich in nltk verwenden?
- 15. Anwendungsaktualisierungen unter Mac OS X
- 16. Verwenden von Eigen unter Mac OS X für XCode
- 17. FinalBuilder Alternative für Mac OS X?
- 18. EnumWindows entspricht für Mac OS X (C++)
- 19. Readelf-ähnliches Werkzeug für Mac OS X?
- 20. Mac OS X 10.10 Meldungsfehler
- 21. Telefonbildschirmfragen für Mac OS X-Entwicklerpositionen?
- 22. Welchen Typ sollte ich für ein 2-dimensionales Array verwenden?
- 23. TFS auf Mac OS X
- 24. Python GUI Framework für Mac OS X
- 25. Unterstützung für Mac OS X Java SDK
- 26. Fortran-Debugger für Mac OS X
- 27. Den Java Classpath auf Mac OS (Mac OS X) drucken
- 28. Qt4Dotnet unter Mac OS X
- 29. Wie Mac OS X Wörterbuch in Eklipse
- 30. Mac OS X Bluetooth-Programmierbeispiel?
Ich denke, das kann problematisch sein, da '#' kein Kommentar in F # ist - Sie könnten besser ein einfaches Bash-Skript schreiben. Wenn du über kompilierte Skripte sprichst, gibt es für Linux einen Kernel-Patch, um '. /' Arbeiten zu lassen - nicht sicher über mac –
@JohnPalmer Ja, das Fehlen von '#' Kommentaren in F # und anderen Sprachen macht Shebangs schwieriger, obwohl nicht unmöglich. http://rosettacode.org/wiki/Multiline_Shebang – mcandre
das ist ziemlich ordentlich - Sie könnten ein ganzes Bash-Skript dort verstecken, das Ihnen erlauben könnte, Portabilität Zeug zu tun –