我在很多地方,包括这个网站上的推荐(首选的Bash shebang是什么?),看到使用#!/usr/bin/env bash优先于#!/bin/bash我甚至看到一个有进取心的人建议使用#!/bin/bash是错误的,这样做会丢失bash功能。
尽管如此,我在一个严格控制的测试环境中使用bash,其中流通的每个驱动器本质上都是单个主驱动器的克隆。我理解便携性的观点,尽管它并不一定适用于我的情况。还有其他原因让我更喜欢#!/usr/bin/env bashover替代方案,假设可移植性是一个问题,有任何理由使用它会破坏功能吗?
通常# !Path /to/命令将触发bash在执行时将命令路径前置到调用脚本。的例子,
# file.sh
#!/usr/bin/bash
echo hi
./file.sh将启动一个新的进程,脚本将像/bin/bash ./file.sh一样执行
Now
# file.sh
#!/usr/bin/env bash
echo hi
将被执行为/usr/bin/env bash ./file.sh,引用env手册页将其描述为:
环境-在修改过的环境中运行程序
因此,env将在其PATH环境变量中查找bash命令,并在单独的环境中执行,其中环境值可以传递给env,如NAME=VALUE对。
你可以使用python等不同的解释器来测试其他脚本。
#!/usr/bin/env python
# python commands