Mar*_*tin 33 bash environment-variables
在 shell 脚本中,在 shebang( #!) 行指定语言解释器。据我所知,建议使用,#!/usr/bin/env bash因为env它总是位于/usr/bin目录中,而位置bash可能因系统而异。但是,如果bash直接使用/bin/bash或通过env实用程序启动,是否有任何技术差异?另外,如果我没有为 指定任何变量env,bash则在未修改的环境中启动,我是否正确?
Chr*_*her 36
从某种意义上说,使用env可考虑在该路径设置为“便携”bash是(不相关/bin/bash,/usr/bin/bash,/usr/local/bin/bash,~/bin/bash,或者其他路径),因为它在环境中指定。通过这种方式,脚本作者可以使他的脚本更容易在许多不同的系统上运行。
在另一种意义上,使用envto findbash或任何其他 shell 或命令解释器被认为是一种安全风险,因为可能会使用未知的二进制文件(恶意软件)来执行脚本。在这些环境中,有时根据管理策略,路径是用完整路径明确指定的:#!/bin/bash。
一般来说,env除非您知道自己是在这些环境中的一种环境中编写,否则请使用这些环境来仔细检查风险的微小细节。
当 Ubuntu 首次开始使用dash2011 年的某个时候,该操作破坏了许多脚本。在 askubuntu.com 上有关于它的讨论。大多数脚本都是编写的#!/bin/sh,它们是指向/bin/bash. 共识是:脚本编写者负责指定解释器。因此,如果您的脚本应始终使用 BASH 调用,请从环境中指定它。这使您不必猜测路径,这在各种 Unix/Linux 系统上是不同的。此外,如果明天/bin/sh成为指向其他 shell 的链接(如/bin/newsh.
另一个区别是该env方法不允许将参数传递给解释器。
| 归档时间: |
|
| 查看次数: |
41221 次 |
| 最近记录: |