/ usr / bin / env有什么影响?

时间:2016-09-06 19:45:19

标签: shell shebang

#! /usr/bin/env ruby#! ruby之间有什么区别?

(我发现很多其他问题正在讨论#! /usr/bin/env ruby#! /usr/bin/ruby之间的区别,但这不是我的问题。)

1 个答案:

答案 0 :(得分:4)

#! ruby

...不保证可以在类UNIX系统上运行(并且根本不会在我个人所知的任何工作上工作);有效的shebang必须具有完全限定的路径。告诉编辑您使用哪种编程语言可能就足够了,但这并不意味着内核会成功地使用它来选择运行程序的解释器。

内核的execve系统调用不进行PATH查找 - 由execlp和{{1}等C标准库包装器添加但是,解析shebangs是由内核直接完成的,因此你的C-library隐私不会发生在那里。

execvp

...使用PATH查找#!/usr/bin/env ruby 可执行文件的位置。因为完全指定了ruby可执行文件的路径,所以这是一个有效的shebang行(env不是)。

#! ruby还有其他用途 - 例如,您可以运行env以使用完全空的环境运行env -i someprog,或someprog运行env FOO=bar someprog 1}}将环境变量someprog设置为值FOObar在运行shell时也会执行此操作,但FOO=bar someprog方法也适用于没有shell的情况参与)。

但是,此上下文中的相关用例是强制进行PATH查找。