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

==
那位網友犯的錯誤是:

##!/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 裡面,到處都可以這樣改(加個 # 變成註解),就只有第一行不能這樣。


Posted by ystuan at 樂多Roodo! │12:30 │回應(2)引用(0)ItchScratching
樂多分類:網路/3C 共同主題:自由軟體 工具:編輯本文
Ads by Roodo! 

引用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