为什么在shebang中使用env?


Answers:


11

某些人可能使用与系统不同的python(perl等)。/usr/bin/env python将运行配置为当前版本的版本,可能会使脚本更具可移植性。

另一方面,据报道,某些系统没有/usr/bin/env。另外,您不能将#!/usr/bin/env foo x用作替代#!foo x,因为foo x它将被解释为单个参数。因此,该方法的价值值得商bat。


1
配置在哪里?从info coreutils 'env invocation'我可以看到,这种形式的调用可确保它是外部二进制文件,而不是内置的shell,但没有迹象表明env pythonpython?有什么不同?
Tuminoid

4
PATH可能包括/usr/local/bin第一个。如果有人在那里手动安装了python,env则将其调用,而#!/usr/bin/python绕过它。
罗比·巴萨克

2
virtualenv是一个非常流行的工具,它在工作目录中安装了python可执行文件。您将需要env技巧来使其正常工作。
Flimm

2
@Tuminoid:您是对的:env python与相同python。但是,问题在于您不能像这样编写shebang #!python:您需要指定完整路径。
Andrea Corbellini 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.