msys의 bash는 뭐 알아서 잘해주더라 그런 이야기다.
/usr/bin/에 env.exe란 파일로 존대한다. 그러므로
#!/usr/bin/env escript라 써도 잘해석하고 잘 해준다.
책에는 저자가 난 모르오 누군가 갈켜 주시오 그리 되어있는데 escript.exe도 존재하니
msys없이도 그냥 호출하면 될 듯하다.
옵션은 아래와 같이 먹일 수 있다고 하네;
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
http://www.erlang.org/doc/man/escript.html
평소에 자주쓰는 #! 구문은 도대체 무었인지 좀 찾아봤다.
그 녀석은 "Shebang" 으로 불리는데 (hashbang, hashpling, pound bang, or crunchbang)
#! 다음 부터는 program loader가 첫줄의 나머지 부분을 interpreter directive로 보고 파싱해서 그 해당하는 넘을 첫줄에 있는 옵션과 함께 잘 실행 시켜 준다고 한다.
(when it occurs as the first two characters in the first line of a text file. In this case, the program loader in Unix-like operating systems parses the rest of the first line as an interpreter directive and invokes the program specified after the character sequence with any command line options specified as parameters.) http://en.wikipedia.org/wiki/Shebang_(Unix)
그런대 왜 #! /usr/bin/env python도 동작 되느냐 하면, env라는 프로그램이 $PATH를 검사해서 python을 찾아준다고 한다.
( At least on the operating systems I have checked, #! must be followed by
the full pathname of a program. It does not search $PATH for it.
'/usr/bin/env python' searches $PATH for python and runs it.
(Usually env is used to set some environment variables for a program,
e.g. 'env PYTHONPATH=whatever python', but one need not specify any
environment variables
Since env is (almost?) always in /usr/bin, while python can be installed
God-knows-where, that is more portable than writing #!/local/bin/python
or #!/usr/bin/python or whatever..) http://www.velocityreviews.com/forums/t324727-what-does-usr-bin-env-python-do.html
가장 상세한 메뉴얼은 http://www.in-ulm.de/~mascheck/various/shebang/ 거 같은디
exec()가 수행한다고하네
Some background. When the UNIX kernel goes to run a program (one
of the exec() family of system calls), it takes a peek at the
first 16 bits of the file. Those 16 bits are called a `magic
number'. First, the magic number prevents the kernel from doing
something silly like trying to execute your customer database
file. If the kernel does not recognize the magic number then it
complains with an ENOEXEC error. It will execute the program only
if the magic number is recognizable.