[英]How can I execute a shell-script in a Bash sub-shell?
我有一个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
情况下实现这一目标,但又不会失去使用别名等的能力?
你可以做同样但没有 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
变量的环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.