使用 /usr/bin/env 作为 Sha-bang

使用 /usr/bin/env 作为 Sha-bang

我想知道,按照您的说法,使用这个 she-bang 是否是一种好的做法:

#!/usr/bin/env bash

代替

#!/bin/bash

本文似乎提倡使用/usr/bin/env但是当我使用它时,怀疑就出现了。

你有什么意见?

答案1

实际上,#!/usr/bin/env几乎每个能理解 的系统都可以移植#!。这是调用 中可能位于 任何位置的程序的有用习惯用法$PATH。如果您对解释器的路径进行硬编码,则将脚本复制到其他机器时可能无法正常工作。

我的一般政策是使用#!/bin/sh仅使用可移植功能的脚本sh(即,如果我只关心现代 unices,则仅使用 POSIX 功能,如果我关心较旧的系统(例如较旧的 Solaris 版本),则仅使用 Bourne 功能)等等#!/usr/bin/env

的缺点#!/usr/bin/env是它不允许你将任何选项传递给解释器。对于某些解释器,可以通过将选项指定为指令来解决此问题,或者将第二行设为双语言代码段,当由 sh 执行时调用解释器,而当由目标解释器执行时不执行任何操作。有一个常见的 perl 习语,例如(传递有用-T)。

答案2

env仅当脚本将在二进制文件位置可能不同的多个系统上使用时才有用。如果脚本仅在单个系统或同构网络中使用,则没有必要。

相关内容