我之前没有在我的云服务器上编辑过 bashrc。服务器更改太频繁,这似乎不值得。我也不想将我的本地 bashrc 上传到每个云服务器,因为我的本地 bashrc 中有很多东西只对我的本地机器有意义。但我有一些特定的别名等,我想在我的所有云服务器上都有。我可以想到几种方法来管理它:
- 为云服务器编写一个 bashrc,然后始终用这个替换默认的 bashrc。缺点:如果我启动具有不同操作系统且具有不同 bashrc 的服务器,上传时我会覆盖其内容吗?
- 我使用我的别名等创建一个单独的文件,并将其上传到我的服务器,然后在现有 bashrc 的末尾添加一行来获取此附加文件。缺点:需要多花点功夫。
- 每次启动新服务器时,只需复制粘贴即可。缺点:费力。
有人有好的解决方案或建议吗?谢谢。
答案1
这是我的设置(初始开销高,后续工作量低)
创建一个 git repo 来存储您的配置文件,并编写一个小的安装脚本来安装它们。
例如,你可以将你的仓库克隆到,
~/src/my_config
然后安装脚本将覆盖(或符号链接)~/.bashrc
到~/src/my_config/.bashrc
这使得在新环境中工作变得非常简单:你只需要
git clone $repo_url ./my_config/install.sh
这并不完全正确:在远程机器上,您还需要
ssh-keygen
将新的公钥添加到您的 git 主机上的帐户。创建一个
~/.bash.d
目录。将其添加到你的 .bashrc 中for file in ~/.bash.d/*.bash; do if [[ -r "$file" ]]; then . "$file" fi done
这样你就可以将诸如定义提示符之类的内容放入单独的文件中:
~/.bash.d/prompt.bash
。我喜欢这样让 .bashrc 保持较小,因为我在交互式 shell 中使用了大量函数。为每个环境创建一个
~/.bash.d/$(hostname)
目录。将其添加到你的 .bashrc 中for file in ~/.bash.d/$(hostname)/*.bash; do if [[ -r "$file" ]]; then . "$file" fi done
所有严格属于特定机器本地的东西都可以被隔离。
符号链接在这里工作良好:如果您的所有 AWS 服务器都使用相同的设置,那么您可以创建
~/.bash.d/AWS
并将所有特定主机名符号链接到它。
这个系统对我来说非常好用。我添加一些新内容,将更改推送到 git,然后在远程系统上通过 git pull 获取新代码。