如果我用来chpst
加载环境变量,例如:
env BAR=baz chpst -e envdir mycommand
我有一个包含内容的envdir
文件envdir/FOO
foo$BAR
有没有办法让ismycommand
的值代替?FOO
foobaz
foo$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