将变量替换为 chpst 加载的环境变量的值

将变量替换为 chpst 加载的环境变量的值

如果我用来chpst加载环境变量,例如:

env BAR=baz chpst -e envdir mycommand

我有一个包含内容的envdir文件envdir/FOO

foo$BAR

有没有办法让ismycommand的值代替?FOOfoobazfoo$BAR

显然上面的方法是行不通的;它离开FOO设置为foo$BAR。我想知道是否可以做一些事情来对加载的环境变量的值进行替换。


完整上下文:大多数情况下,一旦您选择环境,我的环境变量就是静态的,但在某些情况下,它们需要特定于主机。因此,在现实生活中,我HOST在运行环境中设置了适当的主机名,然后我想设置类似API_URL=http://$HOST:8080/.我在没有使用的情况下也可以使用它chpst,但我想用它来管理我的所有环境变量,并且它在 90% 的用例中都能完美运行。

答案1

也许是这样的? (假设 envdir 的内容是可信的)

将此文件放入 envdir/run 中:

#!/bin/bash

for v in `dirname $0`/* ; do
    if [[ "`basename $v`" = run ]]; then
        continue;
    fi
    eval "export `basename $v`=`cat $v`"
done

exec "$@"

然后:

./envdir/run some command

相关内容