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

如何临时加载单个shell命令的env文件,如bash util/function/alias?,bash,Bash,类似于,但我希望有一个类似于“附加用法”的xargs: xenv路径/to/existing/envfile 例如,使用磁盘上的envfile,例如: FOOBAR=“你好词” 我想得到: %FOOBAR=“旧值” %echo$FOOBAR 旧价值 %xenv路径/to/envfile echo$FOOBAR 你好,世界 %echo$FOOBAR 旧价值 我尝试过以下变化: xenv(){ (集合-a&&源“$1”&&&&“$@”) } xenv(){ (set-a&&source$(re

类似于,但我希望有一个类似于“附加用法”的
xargs

xenv路径/to/existing/envfile
例如,使用磁盘上的
envfile
,例如:

FOOBAR=“你好词”
我想得到:

%FOOBAR=“旧值”
%echo$FOOBAR
旧价值
%xenv路径/to/envfile echo$FOOBAR
你好,世界
%echo$FOOBAR
旧价值
我尝试过以下变化:

xenv(){
(集合-a&&源“$1”&&&&“$@”)
}
xenv(){
(set-a&&source$(realpath“$1”)&&&source$@)
}
基于您的
xenv()


请注意,像
xenv./envfile echo“$FOO”
这样的用法不起作用,因为
$FOO
将在当前shell的env中扩展。

您需要通过某种方式从函数中的
$@
中删除
$1
,如答案中所示,这还没有解释它在做什么。
$ 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
$