我认为我的任务很复杂。
我有一台机器,我们称之为服务器,还有一大堆其他机器,hostX。它们都运行 Ubuntu 16.04 服务器。每个主机在启动时都运行一个简单的 bash 脚本,但是该脚本当前具有硬编码值。我想在该脚本中使用变量,但变量值应该存储在服务器上的文件/文件中,这样我就可以在一个中心位置更改值并影响主机或一组主机。我很高兴在更改后我必须重新启动或在每个主机上重新启动脚本,这没问题。我的问题是我不知道如何使用远程机器上的变量,我能找到的只是有关在远程机器上运行脚本的信息。我希望它在本地运行,但从远程提取信息。
这就是我脑海中的工作流程。
host1.cfg
Host1 启动并查看服务器上的 内容。host1.cfg
如下所示:
NAME=John
ADDRESS='10 The High Street'
AGE=25
Host1 运行:
echo server:$HOSTNAME.cfg:$NAME & $ADDRESS & $AGE
或者可能有一个中心HOST.CFG
文件:
[HOST1]
NAME=John
ADDRESS='10 The High Street'
AGE=25
[HOST2]
NAME=Mike
ADDRESS='30 The Avenue'
AGE=80
那有意义吗?
答案1
我会为每个包含变量的主机创建一个文件,我们称之为host1.cfg
,将它复制到脚本的开头,然后source
:
rsync user@server:/path/to/host1.cfg .
source host1.cfg
这将覆盖任何现有的host1.cfg
主机上现有的任何内容,因此服务器文件的更新将在下次运行时应用。被警告将source
执行任何命令host1.cfg
毫不留情地尤其如果您以 root 身份在主机上运行脚本。有关替代方法(可能更安全的方法,取决于您的设置),请参阅:如何从文件读取变量?
我喜欢rsync
,但你也可以使用scp
,wget
或者curl
来完成任务。如果您不需要本地副本,您可以使用(格伦·杰克曼):
source <(ssh user@server "cat /path/to/host1.cfg")