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 版本运行。