March 31,2008
寫 script :馬.上.就要放 shebang
之前有篇舊文是談 smokeping安裝 的,最近有網友留言問問題,經過我一番努力,發現問題在於一個很重要的事情被忽略了,那就是,在寫 script 的時候,一定要記住,檔案的一開頭:
馬.上.就要放 #! (shebang)
簡單的說,有一種叫做 magic number 的設計,放在檔案的開頭,讓系統可以藉此辨識檔案的類型。
例如,微軟的 .exe 檔案,開頭是 MZ ;圖檔格式 GIF ,開頭是 GIF89a 或 GIF87a
至於 script ,就是用 hash (#) 跟 bang (!) 來放在開頭,所以被簡稱為 shebang 。 Shebang 後面緊跟著要放直譯器(interpreter)的完整路徑(例如 #!/usr/bin/perl 或 #!/bin/bash )
不管是哪種 script ,檔案開頭,馬.上.就要放 #! (shebang)!
為了幫助大家加強記憶,讓我們馬.上.就播放 She Bangs! 這首名曲!
==
不,上面那位老兄當然不是 Ricky Martin ......
==
閱讀本文如有不適,請打申訴專線 0800-978978
==
希望這篇貼出來不會有人說要退訂我的網誌 XD
==
那位網友犯的錯誤是:
注意到了嗎?既然是一個 perl script ,就要告訴系統妳的 perl 放在哪裡。如果是 /usr/bin/perl-5.8.8 ,那第一行就應該是 #!/usr/bin/perl-5.8.8 -w(那個 -w 是 perl 的參數),不能夠把 smokeping 官方附的範例(#!/usr/sepp/bin/perl-5.8.4 -w)再加一個 # 把它變成註解就算了。(以這個例子來說,那個 script 因為沒有辦法從檔案開頭的 magic number 辨識出是什麼東東,應該是被系統當成了 shell script 。perl 被當成了 shell ,系統一直回妳 syntax error 也就不奇怪啦。)
是啦,整個 script 裡面,到處都可以這樣改(加個 # 變成註解),就只有第一行不能這樣。
馬.上.就要放 #! (shebang)
簡單的說,有一種叫做 magic number 的設計,放在檔案的開頭,讓系統可以藉此辨識檔案的類型。
例如,微軟的 .exe 檔案,開頭是 MZ ;圖檔格式 GIF ,開頭是 GIF89a 或 GIF87a
至於 script ,就是用 hash (#) 跟 bang (!) 來放在開頭,所以被簡稱為 shebang 。 Shebang 後面緊跟著要放直譯器(interpreter)的完整路徑(例如 #!/usr/bin/perl 或 #!/bin/bash )
不管是哪種 script ,檔案開頭,馬.上.就要放 #! (shebang)!
為了幫助大家加強記憶,讓我們馬.上.就播放 She Bangs! 這首名曲!
==
不,上面那位老兄當然不是 Ricky Martin ......
==
閱讀本文如有不適,請打申訴專線 0800-978978
==
希望這篇貼出來不會有人說要退訂我的網誌 XD
==
那位網友犯的錯誤是:
##!/usr/sepp/bin/perl-5.8.4 -w
#!/usr/bin/perl-5.8.8 -w
注意到了嗎?既然是一個 perl script ,就要告訴系統妳的 perl 放在哪裡。如果是 /usr/bin/perl-5.8.8 ,那第一行就應該是 #!/usr/bin/perl-5.8.8 -w(那個 -w 是 perl 的參數),不能夠把 smokeping 官方附的範例(#!/usr/sepp/bin/perl-5.8.4 -w)再加一個 # 把它變成註解就算了。(以這個例子來說,那個 script 因為沒有辦法從檔案開頭的 magic number 辨識出是什麼東東,應該是被系統當成了 shell script 。perl 被當成了 shell ,系統一直回妳 syntax error 也就不奇怪啦。)
是啦,整個 script 裡面,到處都可以這樣改(加個 # 變成註解),就只有第一行不能這樣。
引用URL
http://cgi.blog.roodo.com/trackback/5781333
回應文章 

了解了!謝謝
Posted by jsoie
at April 1,2008 13:38
jsoie,
哪裡,您大人有大量 :p
Posted by PowerOp
at April 1,2008 18:44