使用单行范围的源加载变量

使用单行范围的源加载变量

在 bash 和其他 shell 中,我可以通过在命令之前定义相同的变量来使其具有“行范围”。

CXX=clang++ ./script.bash

我更喜欢哪个

export CXX=clang++
./script.bash

因为前者不会污染环境。

我怎样才能对设置的变量做同样的事情source并达到相同的“行范围”效果?

相当于:

source env.source  # defines a bunch of vars
./script.bash
??? ./script.bash

答案1

使用子 shell:

( source env.source && ./script.bash )

当子 shell 终止时,子 shell 内的环境将被破坏。

或者,在 中bash设置BASH_ENV脚本:

BASH_ENV=./env.source ./script.bash

BASH_ENV变量对非交互式 shell(即脚本)生效。如果该变量设置为点脚本的路径名,则该点脚本将在主脚本主体运行之前获取。请注意,$PATH使用 时不会搜索点脚本,这与使用或BASH_ENV时不同,因此您需要提供完整路径(相对或绝对)。.source

(“dot-script”== 源自.(dot) 实用程序的脚本,也称为sourcebash

相关内容