这两种 bash 环境有什么区别?

Dan*_*s W 6 bash executable shell-script shebang

我注意到对于bash脚本,有些人使用了与我习惯放在自己顶部的不同的 shebang。

有人可以简化这两者之间的区别吗?我一直用那个#!/bin/bash。

#!/bin/bash
#!/usr/bin/env bash
Run Code Online (Sandbox Code Playgroud)

phe*_*mer 11

在#!/usr/bin/env bash使用脚本结果无论庆典首先在发现$PATH。

虽然 bash 位于/bin/bash. 有些情况下不是(不同的操作系统)。另一个潜在用途是安装了多个 bash shell(较新版本位于替代位置,如/usr/local/bin/bash)。

这样做#!/usr/bin/env bash只是利用了env实用程序的行为。
该env实用程序通常用于在调用程序时操纵环境(例如;env -i someprog清除环境)。但是,除了要执行的程序之外不提供任何参数,它会导致执行中找到的指定程序$PATH。


请注意,这样做有利有弊。

优点如前所述,因为如果 bash 安装在不同的位置,或者如果 bash/bin/bash太旧而无法支持脚本尝试做的事情,它使脚本具有可移植性。

缺点是您可能会出现不可预测的行为。由于您受用户的 . 的支配$PATH,这可能导致脚本使用与脚本期望的行为不同的 bash 版本运行。