我已经在很多地方看到过,包括本网站上的建议(首选Bash shebang是什么?),它们#!/usr/bin/env bash
优先于使用#!/bin/bash
。我什至已经看到一个有进取心的个人认为使用#!/bin/bash
是错误的,这样做会丢失bash功能。
综上所述,我在严格控制的测试环境中使用bash,其中每个流通的驱动器实质上都是单个主驱动器的克隆。我理解可移植性参数,尽管它不一定适用于我的情况。是否还有其他理由要优先#!/usr/bin/env bash
考虑其他选择,并且考虑到可移植性,是否有任何理由使用它会破坏功能?
env
可能不在/usr/bin
。Shebang的评论完全是个坏主意,恕我直言。如果您的默认脚本解释器不处理shebang注释,则仅是注释。但是,如果您知道脚本解释器可以处理shebang注释,并且知道bash的路径,则没有理由不使用其绝对路径来调用它,除非该路径太长(不太可能),否则您可能会移植脚本到/ bin中没有bash的系统。再说一次,我前面提到的警告适用于这种情况,因为它涉及可移植性。
/etc
或/bin/sh
。bash
是大多数类似Unix的系统的附件。只有Linux bash
可以保证存在,/bin
并且很可能也链接为/bin/sh
。自从Linux成为许多人事实上的现代Unix以来,人们已经忘记了可能存在Linux以外的系统的事实。在我下面的回答中,我假设使用Linux,因为您说bash
。我使用过的许多BSD盒甚至都没有安装。
/bin/bash
。默认情况下未安装Bash。如果需要,您必须pkg install bash
。安装后,它位于/usr/local/bin/bash
。/bin/bash
OpenBSD上没有安装任何东西。的家当#!/bin/bash
就会报错,并且#!/usr/bin/env bash
一定会成功。