ãã¾ããèããªãã#! ã§å§ã¾ãï¼è¡ç®ã®ååã¨envæå®æã®æå
ã·ã§ã«ã¹ã¯ãªããã§ããã°ï¼è¡ç®ã« #!/bin/sh ã¨æ¸ãã¨æãã®ã§ããã1è¡ç®ã®ååãæåã«ã¤ãã¦ããåãã£ã¦ãªãã£ãã®ã§èª¿ã¹ã¦ã¿ã¾ããã
åå
ã·ãã³ã¾ãã¯ã·ã§ãã³ (shebang) ã¨ã¯UNIXã®ã¹ã¯ãªããã®#!ããå§ã¾ã1è¡ç®ã®ãã¨ãèµ·åãã¦ã¹ã¯ãªãããèªã¿è¾¼ãã¤ã³ã¿ããªã¿ãæå®ããã hash-bangã¾ãã¯sharp-bangã¨ãè¨ãããå¾è ã縮ããshebangã¨ããå¼ã³æ¹ãä¸è¬çãã¤ã·ã³ãã«ã§ããã
ã·ãã³ã¨ããã®ã§ããã
ãã®ã#!ãã®ãã¨ããã·ã§ãã³ã°ã(shebang) ã¨å¼ã¶ãã¾ãããã®è¡å ¨ä½ããã·ã§ãã³ã°è¡ãã¨å¼ã¶ãã¨ããããã·ã§ãã³ã°ã®èªæºã¯ãsharp bangããshell bangããªã©ãããã¤ãããããã ã
ãªãã#! ãªã®ã
ã³ã³ãã¥ã¼ã¿ãç´æ¥è§£éã§ããã®ã¯ãã·ã³èªã ãã§ãããããã UNIX ã§ã¯ããã¡ã¤ã«ã®å é 2ãã¤ããã#!ãã§ãã£ãå ´åã¯ããã®å¾ã«è¨è¿°ããã¦ããå¥ã®ã³ãã³ããå®è¡ãããã¨ããã
env ã使ãå ´åã®æåã«ã¤ãã¦
/usr/bin/env ã使ãã°ãã¹ãç´æ¥æå®ããå¿ è¦ã¯ãªããªãããã¤ã³ã¿ããªã¿ã«ã³ãã³ãã©ã¤ã³å¼æ°ã¨ãã¦ãªãã·ã§ã³ã渡ããã¨ãã§ããªãã
ãã¤ã³ã¿ããªã¿ã«ã³ãã³ãã©ã¤ã³å¼æ°ã¨ãã¦ãªãã·ã§ã³ã渡ããã¨ãã§ããªãããã¨ã¯ã©ããããã¨ã§ãããããRubyã§å®é¨ãã¦ã¿ã¾ãã
rubyã§ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã渡ããªãå®é¨
'-v'' ãªãã·ã§ã³ã使ã£ã¦å®é¨ãã¾ãã
envã使ããªãå ´å
% echo '#!/usr/local/bin/ruby -v' > hoge % chmod 755 hoge % ./hoge ruby 1.8.6 (2009-06-08 patchlevel 369) [i686-linux]
envã使ãå ´å
% echo '#!/bin/env ruby -v' > hoge % chmod 755 hoge % ./hoge /bin/env: ruby -v: ãã®ãããªãã¡ã¤ã«ããã£ã¬ã¯ããªã¯ããã¾ãã
'ruby -v 'ã¨ãããã®ã§ï¼ã¤ã®å¼æ°ã¨ãªã£ã¦ããããã§ãã念ã®ããã#!/bin/env ruby ã§ã¡ããã¨rubyã使ãããå®é¨ã§ãã
% echo '#!/bin/env ruby' > hoge % echo 'puts "Hello World!"' >> hoge % chmod 755 hoge % ./hoge Hello World!
rubyã§ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã渡ããªãçç±
[ruby-list:41934] Re: Cygwin での #!/bin/env ruby -Ks
å¤ãã®OSã§ã¯#!è¨æ³ã¯å¼æ°ãä¸ã¤ããåãä»ããªãã®ã§ããªãã·ã§ã³ãä»ãã¦å¼ã³åºãããæã«ã¯envã¯ä½¿ãã¾ãããenvã使ãã¨rubyã¤ã³ã¿ããªã¿ãPATHããæ¤ç´¢ãã¦ãããã®ã§ä¾¿å©ãªãã¨ããããã§ããã©ãã
ãã¾ãï¼Mac OS X 10.6.2 ã§ãã£ãã env ã§ãè¤æ°ã®å¼æ°ã渡ãã
envã使ããªãå ´å
% echo '#!/opt/local/bin/ruby -v' > hoge % chmod 755 hoge % ./hoge ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
ãã¾ãï¼å®é¨ç°å¢
OS | Mac OS X 10.6.2 |
ãã¾ãï¼ï¼ä¸æ£ãªã·ãã³ãç¡è¦ãããå ´å
ä¸æ£ãªã·ãã³ãç¡è¦ãããå ´åãããã¾ãã
#!/opt/local/bin/rubyfoooooooooooo puts "test"
以ä¸ã®çµæãè¦ãã¨ãã³ãã³ãã©ã¤ã³ã§ã¤ã³ã¿ããªã¿ãæå®ããã¨ã·ãã³ãç¡è¦ããããã§ãã
% ruby shebang_test.rb test % % ./shebang_test.rb zsh: ./shebang_test.rb: bad interpreter: /opt/local/bin/rubyfoooooooooooo: no such file or directory
ãããã以ä¸ã®ä¾ã¯ç¡è¦ããã¾ããã
#!/opt/local/bin/hogefugabazfoooooooooo puts "test"
å®è¡çµæã¯ãCan't execãã«ãªãã¾ããã·ãã³ã« ruby ã®æåãæããç¡ããã§å¤æãã¦ããããã§ãã
% ruby shebang_test.rb shebang_test.rb:1: Can't exec /opt/local/bin/hogefugabazfoooooooooo (fatal)
ãã®è¾ºããTwitterã§å°ãããã¨ããããã¾ããã
- shebangを書いてもコマンドライン側でインタプリタを指定していればshebangは無視される。 #lrtechtips
- と思ったけど、#!/opt/local/bin/hogefugabazfoooooooooo と書くと無視されない・・・むむむ
- でも、 #!/opt/local/bin/rubyfoooooooooooo だと無視される・・・前方一致とかやってるのかな・・・
- @japanrock "ruby"の有無だけ
- @japanrock ちなみに1.9だとshebangにrubyが含まれていない場合、-xが指定されているとみなします。つまり、/^#!.*ruby/までを無視。見つからなければエラー。
ãã¾ãï¼ï¼å®é¨ç°å¢
OS | Mac OS X 10.6.2 |
ã¾ã¨ã
誤解ãã¦ããé¨åããããã¨æãã¾ãã®ã§ãããã³ããé¡ããã¾ãï¼ï¼