如何临时加载单个shell命令的env文件,如bash-util/function/alias



类似于使用.env文件运行shell脚本,但我希望有一个类似xargs的"附加用法":

xenv path/to/existing/envfile <WHATEVER COMMAND TO RUN>

例如,在磁盘上有一个envfile,如:

FOOBAR="Hello Word"

我想要:

% FOOBAR="old value"
% echo $FOOBAR
old value
% xenv path/to/envfile echo $FOOBAR
Hello World
% echo $FOOBAR
old value

我试过一些变体,比如:

xenv() {
(set -a && source "$1" && "$@")
}
xenv() {
(set -a && source $(realpath "$1") && "$@")
}

基于您的xenv():

$ xenv() { (set -a && source "$1" && shift && "$@"); }
$ cat envfile
FOO='hello world'
$ FOO='old value'
$ echo $FOO
old value
$ xenv ./envfile bash -c 'echo $FOO'
hello world
$ echo $FOO
old value
$

注意,像xenv ./envfile echo "$FOO"这样的用法不起作用,因为$FOO会在当前shell的env中展开。

最新更新