如何在Bash子shell中执行shell脚本?

时间:2013-06-05 02:02:06

标签: linux bash

我有一个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的情况下实现此目的,但又不会失去使用别名等的能力?

1 个答案:

答案 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变量。