会有什么区别或者只是个人选择吗?在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. 在Laravel的'join'或'where'中使用'='有什么区别?
- 4. javascript中功能有什么区别使用或不使用
- 5. 有什么区别使用=和:在javascript
- 6. 有什么区别?
- 7. |有什么区别?和||或运营商?
- 8. 为什么在%中使用合并和%有什么区别?
- 9. 有什么区别`和$(Bash中有什么区别?
- 10. rebar和rebar3有什么区别?或erlang.mk
- 11. <?或<?php ---有什么区别?
- 12. 使用或不使用委托有什么区别
- 13. 有什么区别
- 14. 有什么区别?
- 15. 有什么区别
- 16. 使用addEventListener有什么区别?
- 17. 有什么区别?
- 18. 使用return语句有什么区别?
- 19. activity_main.xml或fragment_main.xml有什么区别?
- 20. 有什么区别?
- 21. string.split(text)或text.split()有什么区别?
- 22. Postcss和grunt或gulp有什么区别?
- 23. 有什么区别? ./ ./*在Linux
- 24. 有什么区别)Scala中
- 25. 有什么区别
- 26. 有什么区别?
- 27. 有什么区别
- 28. 有什么区别
- 29. 在Prolog中==和= =有什么区别?
- 30. 使用移调有什么区别?
除此之外,非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