我有一个shell函数,在设置了一些环境变量后,在子shell中执行一个命令,例如。
$ with-env-overrides git status
它是在子shell中使用eval
实现的
with-env-overrides() {
(
source $HOME/.env-overrides
eval "$@"
)
}
这意味着我可以使用别名和shell函数,例如
$ with-env-overrides gs
但不幸的是,当参数包含空格或shell元字符时,eval会混淆,例如
$ with-env-overrides grep "foo bar" /etc/passwd
grep: bar: No such file or directory
如何在不使用eval
的情况下实现此目的,但又不会失去使用别名等的能力?
答案 0 :(得分:2)
你可以这样做,但没有 eval。
with-env-overrides() {
(
source $HOME/.env-overrides
"$@"
)
}
示例:
$ cat ~/.env-overrides
export A=1000
$ export | grep ^A=
$ with-env-overrides export | ^grep A=
declare -x A="1000"
如您所见,在第二种情况下,您的环境中包含A
变量。