回答
哇!這帶來了很多回憶!
早在20世紀80年代和90年代初,Bourne shell(/bin/sh
)和C shell(/bin/csh
)有兩個基本shell。
Bourne shell有很少用戶友好的東西。沒有別名或命令替換。因此,大多數人喜歡使用C Shell作爲它們的默認外殼。
但是,Csh是一種可怕的腳本語言。 (見http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/)。因此,你使用C shell作爲你的shell,但是你的腳本寫在Bourne shell中,它有更好的語法。
但是,有一個小小的問題:由於您的默認shell是C Shell,因此在命令行輸入shell腳本名稱,並且C Shell會將其選中並嘗試執行它。
爲了解決這個問題,你把:
作爲你的程序的第一行。這是Bourne shell的註釋,但是是一個無效的C Shell命令。因此,如果您忘記將sh
放在它的前面,腳本將無法運行。
稍後,系統會知道第一行是否爲:
,它應該是Bourne shell腳本。而且,甚至以後,你可以把#:
,這樣它將是一個評論,而不是一個命令。有些人把shell的名字/bin/sh
放在它旁邊,以幫助提醒人們將它作爲Bourne shell腳本運行。
在Kornshell開始流行後,C shell開始走向滅亡。大約在這個時候,shebang(#!
)出來了,但那只是AT & T而不是伯克利派生的系統。直到20世紀80年代後期,BSD系統纔得到了shebang。而且,在Solaris發佈之前,Sun人員使用C Shell作爲其默認shell。
我還沒有看到一個程序開始於年齡爲#: /bin/sh
。
順便說一句,這是常見的啓動腳本是這樣的:
#! /usr/bin/env perl
這樣,你使用Perl的版本在你的路徑,並不必擔心,這是在什麼目錄。例如,如果你開始你的腳本:
#! /usr/local/bin/perl
而且,Perl的實際上是/usr/bin
,你的腳本將無法運行。該env
程序始終在/usr/bin
,並保證工作。當然,如果你想使用特定版本的Perl而不是路徑中的Perl版本,你可以使用第一種方法。
這僅僅是一個註釋...
#:/bin/sh
一個家當是#!其他以#開頭的內容都是評論。
例如:
運行開始
#!/usr/bin/perl
,它會被Perl運行的腳本。現在,替換'!'按':',然後你可以使用defaut解釋器來運行它,這是你的shell。
完全正確。只是一個小紙條。出於歷史原因,`#!`之後首選空格。 – 2010-11-24 19:49:42
@Diego:我認爲這些歷史原因與這種模糊和過時的系統有關,這些日子裏,沒有人再使用這個空間。 – 2010-11-24 20:47:30
- 1. 之間的〜/和的區別../
- 2. '#','%'和'$'之間的區別
- 3. {!!之間的區別!!}和{{}}
- 4. '+ ='和'= +'之間的區別?
- 5. 「。+」和「。+?」之間的區別
- 6. .eq之間的區別。和==
- 7. #。/和#之間的區別。 ./
- 8. !=和!之間的區別==
- 9. 「%〜dp0」和「。\」之間的區別?
- 10. | =和^ = css之間的區別
- 11. 之間的區別。和#
- 12. ==和case之間的區別?
- 13. 「**/* /」和「** /」之間的區別?
- 14. jQuery - '。'之間的區別和「#」
- 15. 「?1」和「?」之間的區別
- 16. `%in%`和`==`之間的區別
- 17. fmod和%之間的區別
- 18. 之間的區別:+和:+
- 19. 類區域和堆之間的區別
- 20. SPFile和PublishingPage類別之間的區別
- 21. 子類和類別之間的區別?
- 22. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 23. isForeground()和onExposed和onObscured之間的區別
- 24. $ .ajax()和$ .get()和$ .load()之間的區別
- 25. 和intent和setcontentview之間的區別
- 26. Java和C#和.NET之間的區別
- 27. NSthread和NStimer和NSNotifcation之間的區別?
- 28. sys.log()和console.log()和console.error()之間的區別?
- 29. 關注與責任之間的區別(即SRP和SoC之間的區別)?
- 30. make中的「$(shell ...)」和「$$(...)」之間的區別
當他或她引用`#!`時可能是一個錯字... – 2010-11-24 19:49:10