Tôi thích sử dụng shebangs để chạy các script Perl tôi trực tiếp:Đường đi shebang phù hợp là gì?
#!/usr/bin/env perl
các công việc cho các chương trình Go là gì?
Tôi thích sử dụng shebangs để chạy các script Perl tôi trực tiếp:Đường đi shebang phù hợp là gì?
#!/usr/bin/env perl
các công việc cho các chương trình Go là gì?
Các chương trình đi được biên dịch thành mã nhị phân; Tôi không nghĩ rằng có một tùy chọn để chạy chúng trực tiếp từ nguồn.
Điều này tương tự với các ngôn ngữ được biên dịch khác như C++ hoặc Java. Một số ngôn ngữ (như Haskell) cung cấp cả một chế độ được biên dịch đầy đủ và một chế độ "tập lệnh" mà bạn có thể chạy trực tiếp từ nguồn với một dòng shebang.
+1 máy Perl là một ngôn ngữ kịch bản được giải thích .... –
Không có theo mặc định. Có một công cụ của bên thứ ba được gọi là gorun mà sẽ cho phép bạn làm điều đó, mặc dù. https://wiki.ubuntu.com/gorun
Thật không may các trình biên dịch không thích dòng shebang. Bạn không thể biên dịch cùng mã bạn chạy với gorun.
Argh. 6g và bạn bè bork khi họ nhìn thấy một shebang. – mcandre
Xin lỗi, tôi nên đề cập đến điều đó. Đã chỉnh sửa. –
//usr/bin/go run $0 [email protected] ; exit
dụ:
//usr/bin/go run $0 [email protected] ; exit
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
đi điều trị // như một dòng bình luận và vỏ bỏ qua thêm/
Bạn có thể chỉnh sửa shebang để áp dụng cho bất kỳ tệp Go nào, không chỉ hello_world.go? Có thể sử dụng '$ 0' hoặc như vậy? – mcandre
Đó không phải là một dòng shebang. Nó sẽ bắt đầu bằng '#!'. (Biết rằng đi không thích nó). Đây không phải là di động, nhưng có lẽ đủ tốt cho nhiều người, vì vậy +1 cho câu trả lời. – topskip
Tôi nghĩ tốt hơn nên viết như sau: '/// usr/bin/env go run $ 0 $ @; exit' – ivanzoid
tôi thích điều này:
///bin/true; exec /usr/bin/env go run "$0" "[email protected]"
này có một số ưu điểm so với câu trả lời của هوم جاویدپور:
Sử dụng 'exec' để thay thế cho quá trình vỏ mới thay vì tung ra một quá trình cháu. Do đó, chương trình Go của bạn sẽ là một tiến trình con trực tiếp. Điều này hiệu quả hơn và nó cũng quan trọng đối với một số tình huống nâng cao, chẳng hạn như gỡ lỗi và giám sát.
Trích dẫn các đối số phù hợp. Dấu cách và ký tự đặc biệt sẽ không gây ra sự cố.
Hàng đầu "///" tuân thủ nhiều tiêu chuẩn hơn chỉ "//". Nếu bạn chỉ sử dụng "//", bạn có nguy cơ gặp phải hành vi được xác định thực hiện. Dưới đây là một trích dẫn từ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html:
Nếu một tên đường dẫn bắt đầu với hai nhân vật liên tiếp, các thành phần đầu tiên sau các nhân vật hàng đầu có thể được hiểu một cách thực hiện xác định, mặc dù hơn hai hàng đầu ký tự sẽ được coi là một ký tự đơn.
Tôi đã thử nghiệm câu trả lời này với bash, dấu gạch ngang, zsh và ksh.
Ví dụ:
///bin/true; exec /usr/bin/env go run "$0" "[email protected]"
package main
import "fmt"
func main() {
fmt.Println("你好!")
}
Tôi muốn chỉ ra rằng nếu chương trình của bạn os.Exit() s với một mã số khác không phải là thực tế là in ấn để stderr và đi chạy trả về 1 như là mã thoát của nó. – tmc
Điều này cũng đúng với câu trả lời từ هومن جاویدپور –
Sử dụng '/ bin/true' không phải là di động (ví dụ: OSX và Zsh) – Kreisquadratur
Go được biên dịch. Bạn không nên cần một shebang. Đúng? –
[Chuỗi thảo luận trong golang-hạt] (https://groups.google.com/d/msg/golang-nuts/iGHWoUQFHjg/hEhYPQjP3HcJ) có một bài đăng tương tự với [هومن جاویدپور] (http://stackoverflow.com/users/1040891) 's [answer] (http: // stackoverflow.com/a/17900932/109747) –