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

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

我注意到对于bash脚本,有些人使用不同的 舍邦到我习惯于把它放在我自己的顶部的那个。

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

#!/bin/bash
#!/usr/bin/env bash

答案1

脚本中的结果#!/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 安装在不同的位置,或者如果/bin/bashbash 太旧而无法支持脚本尝试执行的操作,则它使脚本可移植。

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

相关内容