在 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) 实用程序的脚本,也称为source
。bash
)