我已经在很多地方看到过,包括本网站上的建议(首选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/bashOpenBSD上没有安装任何东西。的家当#!/bin/bash就会报错,并且#!/usr/bin/env bash一定会成功。