次のスクリプトについて混乱しています(hello.go
)。
//usr/bin/env go run $0 $@ ; exit
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
実行できます。(MacOS X 10.9.5の場合)
$ chmod +x hello.go
$ ./hello.go
hello, world
から始まるシバンについて聞いたことがありません//
。また、スクリプトの先頭に空白行を挿入しても機能します。このスクリプトが機能するのはなぜですか?
///....
代わりに使用する必要があります//...
!
go run "$0" "$@"
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"
...