Tôi đã cài đặt F # 2.0 với Mono và tôi muốn ./
tập lệnh F # của mình. Tôi nên sử dụng dòng shebang nào cho Mac OS X? Dòng shebang này có thể được tổng quát hóa cho Mac OS X và Linux không?Tôi nên sử dụng shebang nào cho tập lệnh F # trong Mac OS X?
Trả lời
Vì vậy, trong câu trả lời @ mcandre của, nó hoạt động vì most shells revert to bourne shell khi họ không tìm thấy một công việc.
Vì vậy, có #light
là cả hai F # hợp lệ và nhận xét trong bourne shell cho phép mỗi môi trường kịch bản để xem những gì nó hiểu.
Tuy nhiên, tập lệnh bên trong có thể được cải thiện. Khi chúng tôi thực thi tập lệnh, hãy thêm --quiet
vào --exec
có vẻ dư thừa, chúng tôi cũng hy vọng tất cả đối số sẽ được chuyển đến tập lệnh. Một phiên bản lý tưởng hơn sẽ là exec fsharpi --exec $0 $*
vì vậy tất cả đối số sẽ được chuyển như thể bạn đã chạy lệnh một cách rõ ràng.
#light
không phải là chỉ #
đứng trước chỉ thị trong F #. Preprocessor định nghĩa cũng sẽ làm việc và có thể trực quan với những gì đang xảy ra. Việc đặt tập lệnh shell giữa #if run_with_bin_sh
và #endif
sẽ ẩn với f # vì run_with_bin_sh
sẽ không được xác định.
Ví dụ fsx:
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
printfn "%A" fsi.CommandLineArgs
update: hỗ trợ công việc Bất động như #!/usr/bin/env fsharpi --exec
đã được thêm vào official Microsoft F# code base. Vì vậy, nó sẽ làm việc với các phiên bản tương lai của F #.
cập nhật 2:#!/usr/bin/env fsharpi --exec
hoạt động tốt cho mac nhưng không hoạt động trên linux. Linux cần phải là #!/usr/bin/fsharpi --exec
the incompatibilty is annoying.
Nếu bạn muốn có nền tảng chéo shebang. Sau đây sẽ làm việc.
#!/bin/sh
#if run_with_bin_sh
exec fsharpi --exec $0 $*
#endif
Trong Mac OS X, chương trình là fsharpi
.
hello.fs:
#light (*
exec fsharpi --exec $0 --quiet
*)
System.Console.WriteLine "Hello World"
Tôi nghĩ điều này có thể có vấn đề vì '# 'không phải là nhận xét trong F # - bạn có thể viết một đoạn mã bash đơn giản hơn. Nếu bạn đang nói về các kịch bản đã biên dịch, cho linux có một bản vá hạt nhân để làm cho '. /' Work - không chắc chắn về mac –
@JohnPalmer. Có, thiếu các chú thích '#' trong F # và các ngôn ngữ khác làm cho các shebang khó khăn hơn, mặc dù không phải là không thể. http://rosettacode.org/wiki/Multiline_shebang – mcandre
khá gọn gàng - bạn có thể ẩn toàn bộ tập lệnh bash ở đó có thể cho phép bạn thực hiện các công cụ di động –