为什么在shebang中使用env?

Tum*_*oid 19 command-line bash environment

#!/usr/bin/env <sh|bash|python>#!/bin/bash,#!/bin/sh或相比,使用shebang的目的是什么#!/usr/bin/python

cho*_*oba 11

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

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

  • 你的 `PATH` 可能首先包含 `/usr/local/bin`。如果有人在那里手动安装了 python,那么 `env` 会调用它,而 `#!/usr/bin/python` 会绕过它。 (4认同)
  • `virtualenv` 是一个非常流行的工具,它会在工作目录中安装一个 python 可执行文件。您需要使用 `env` 技巧才能使其正常工作。 (2认同)
  • @Tuminoid:你是对的:`env python` 与 `python` 相同。然而问题是你不能像`#!python` 那样写shebang:你需要指定一个完整的路径。 (2认同)