0

在设置一些环境变量后,我有一个 shell 函数,它在子 shell 中执行命令,例如

$ with-env-overrides git status

它是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,但又不会失去使用别名等的能力?

4

1 回答 1

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变量的环境。

于 2013-06-05T02:28:14.410 回答