會有什麼區別或者只是個人選擇嗎?在shebang中使用#!/ usr/bin/env或#!/ bin/env有什麼區別?
回答
#!<interpreter> <arguments>
試圖運行<interpreter> <arguments>
來讀取並運行文件的其餘部分。
所以#!/usr/bin/env
意味着必須有一個叫做/usr/bin/env
的程序;
#!/bin/env
表示必須有一個名爲/bin/env
的程序。
一些系統有一個而不是另一個。
以我的經驗,大部分都有/usr/bin/env
,所以#!/usr/bin/env
比較常見。
Unix系統將嘗試使用execve
運行<interpreter>
,這就是爲什麼它必須是完整路徑,而沒有路徑的#!env
將不起作用。
/usr/bin/env
是到/bin/env
的軟鏈接。從本質上講,你正在使用/bin/env
取決於系統。 – 2011-04-05 14:43:27
哪個系統具有兩個硬文件? – kurumi 2011-04-05 15:49:41
Ubuntu沒有/ bin/env。 Solaris 8分別具有兩個文件。 – 2011-04-05 16:02:16
米克爾的解釋是偉大的,它錯過只是一個小的事實(這是相當重要的),這只是一個傳遞包括所有空間的說法:
#!<Interpreter> <argument>
結果在呼喚:
$ <Interpreter> '<argument>' path_to_calling_script
因此,例如:
$ cat /tmp/test
#!/usr/bin/env python
print "hi"
$ /tmp/test
是與調用:
$ /usr/bin/env "python" /tmp/test
的報價嘗試表明,如果你添加任何標誌或其他值將是參數的一部分被調用。
#!/bin/bash -c /bin/env python
將被解釋爲:
$ /bin/bash "-c /bin/env python"
這將無法正常工作。
- 1. 使用!-command或system()有什麼區別?
- 2. 在src或href中使用「http://」和「//」之間有什麼區別?
- 3. 在NHibernate中使用IList,IEnumerable,ISet或ICollection有什麼區別?
- 4. 在Laravel的'join'或'where'中使用'='有什麼區別?
- 5. javascript中功能有什麼區別使用或不使用
- 6. 有什麼區別使用=和:在javascript
- 7. 有什麼區別?
- 8. |有什麼區別?和||或運營商?
- 9. 爲什麼在%中使用合併和%有什麼區別?
- 10. Condition或ConditionVariable有什麼區別?
- 11. 有什麼區別`和$(Bash中有什麼區別?
- 12. rebar和rebar3有什麼區別?或erlang.mk
- 13. <?或<?php ---有什麼區別?
- 14. 在gulp-postcss或其外部使用autoprefixer有什麼區別?
- 15. 使用或不使用委託有什麼區別
- 16. 有什麼區別
- 17. 有什麼區別?
- 18. linux kernel:module或built-in有什麼區別?
- 19. 有什麼區別
- 20. 有什麼區別
- 21. 使用addEventListener有什麼區別?
- 22. layout_weight和使用dp有什麼區別?
- 23. 有什麼區別?
- 24. 使用return語句有什麼區別?
- 25. activity_main.xml或fragment_main.xml有什麼區別?
- 26. 有什麼區別?
- 27. string.split(text)或text.split()有什麼區別?
- 28. loader或AsyncTask有什麼區別?
- 29. Postcss和grunt或gulp有什麼區別?
- 30. Guid.Parse()或新的Guid() - 有什麼區別?
除此之外,非OSX BSD沒有'/ bin/bash',所以推薦'/ usr/bin/env'來實現可移植性。另外,如果你想在'$ PATH'中排隊的不同目錄中運行更新版本的BASH,'env'會尊重和使用它,而'/ bin/bash'顯然是硬編碼的。 – kvz 2013-04-19 11:22:07
特別是,OS/X具有'/ usr/bin/env',並且沒有'/ bin/env'到'/ usr/bin/env'的符號鏈接。你會得到一個'-bash:./your_commnd:/ bin/env:壞解釋器:沒有這樣的文件或目錄錯誤。 – 2013-05-22 21:57:22