我使用 aws cfn 启动 ubuntu 实例,并且需要将 cfn 启动脚本中提供的变量传递给实例上的脚本。例如,我可能会传递“db-server=db-2.domain.com”,并且实例上有许多脚本想要知道该地址。
目前,我在 /etc/profile.d 中创建一个文件,设置 vars with export
,但这仅在 bash 作为登录 shell 启动时才有效,这需要我采取额外的操作才能使这些变量无处不在。
所以我想也许我可以在 /usr/local/bin 中创建文件,例如get-db-host.sh
使用echo "db-2.domain.com"
as 内容,这样每个脚本都可以使用它们,而无需进行任何更改。
这是一个好方法吗?
答案1
这是一个好方法吗?
我很确定你所说的所有脚本都是 shell 脚本。在这种情况下,您可以将所有变量放入配置文件中:
db-server=db-2.domain.com
将其放置在标准位置(例如,/usr/local/etc/myapp/
)并在其他脚本中获取它:
. /usr/local/etc/myapp
/etc
显然,您也可以使用普通的。
答案2
推荐的方法是将变量添加到/etc/environment
.该文件在登录时读取(从Ubuntu 文档):
影响整个系统(而不仅仅是特定用户)的环境变量设置不应放置在加载系统或桌面会话时执行的许多系统级脚本中的任何一个中,而应放置在
/etc/environment - 该文件专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由每行一个赋值表达式组成。具体来说,该文件存储系统范围的区域设置和路径设置。
所以,只需编辑/etc/environment/
并添加
db-server=db-2.domain.com
答案3
我会对这个想法说不。该目录/usr/local/bin
适用于本地的可执行文件,而不是任何特定包的一部分(通常)。
不要让它成为你正在做的一些神秘的设置,而是将变量放在对可能需要执行你的任务的其他人来说显而易见的地方。
我将它们放在您$HOME
目录中的一个文件中,然后只需从您的$HOME/.bashrc
.
例子
if [ -f $HOME/.my_aws_env ]; then
. $HOME/.my_aws_env
fi
或者你也可以很酷很时髦,用一句话来完成:
[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env