当前位置: 首页>>技术教程>>正文


使用 Dropbox 在机器之间共享 .bashrc 的影响?

,

问题描述

我在很多不同的机器上工作,都运行 Ubuntu(并不总是相同的版本)。我对我的提示进行了一些非常基本的自定义,我希望在所有机器上都可以使用。

我目前使用 Dropbox 并将所有其他 “dot files” 存储在那里,例如我的 .vim/.vimrc .gitconfig .ackrc。然后我只需将它们从我的 Dropbox 文件夹链接到我的主文件夹。瞧,所有机器都同步了。

我不确定用我的 bashrc 做这样的事情会产生什么影响。任何人都可以提供建议吗?也许是一种在 bashrc 中加载单独文件的简单方法?

最佳方案

我没有看到任何真正的影响,但我想这取决于你在那里有什么!如果只是在任何地方都一样的快速别名和装饰性的东西,我看不出任何问题。

您可以将 .bashrc 移动到 Dropbox 文件夹中的某个位置,然后在每台机器上进行符号链接。

  mkdir -p ~/Dropbox/dotfiles
  mv ~/.bashrc ~/Dropbox/dotfiles/.bashrc
  ln -s ~/Dropbox/dotfiles/.bashrc ~/.bashrc

我的主文件夹中实际上有很多点文件,它们实际上是我的 Dropbox 帐户中共享文件夹的符号链接。

另一种选择是您可以在 Dropbox 文件夹中创建一个文件,由 .bashrc 获取:

即,在您的 .bashrc 中,输入:

source $HOME/Dropbox/dotfiles/bashrc-shared-settings

然后创建一个 bashrc-shared-settings 文件,这是你想在所有机器上使用的东西,你仍然可以保留单独的 .bashrc 文件。

(您也可以在 bash 中将 source 缩写为 .。)

次佳方案

我能想到的主要风险是您必须记住同步与备份不同。任何错误都将同步到您的所有机器。

要在 ~/.bashrc 中包含一个单独的文件,请添加如下内容:

if [ -f ~/.foo ]; then
    . ~/.foo
fi

其中 ~/.foo 是单独的文件。

第三种方案

通常,集中配置文件是一件好事!如果要自定义基于给定操作系统或主机名运行的内容,可以在 .bashrc 中执行以下操作:

export HOSTNAME=`hostname | cut -f1 -d'.'`

if [ -f ~/.bash/os/$OSTYPE.sh ]; then
    source ~/.bash/os/$OSTYPE.sh
fi

if [ -f ~/.bash/host/$HOSTNAME.sh ]; then
    source ~/.bash/host/$HOSTNAME.sh
fi

然后,创建一个 .bash 目录以及该目录下的 os 和 host 目录,并将任何自定义设置放在名为 <whatever>.sh 的文件中,其中 <whatever>是您要自定义的操作系统类型或主机。

我将所有这些文件保存在 dropbox 中,我的 Dropbox 文件夹中有一个名为 link_dropbox 的 bash 脚本,可帮助我方便地将它们链接到:

#!/bin/bash

#Array of <source><space><link> target->symlink mappings
linkarray=( "~/Dropbox/config/bashrc ~/.bashrc"
            "~/Dropbox/config/bash ~/.bash"
            "~/Dropbox/config/vimrc ~/.vimrc"
            "~/Dropbox/config/vim ~/.vim"
            "~/Dropbox/config/ssh ~/.ssh"
            "~/Dropbox/config/screenrc ~/.screenrc"
            "~/Dropbox/bin ~/bin" )

#turn off globbing to split each entry on spaces
set -f
for entry in "${linkarray[@]}"
do
    targets=( $entry )
    #eval will expand the tildes
    eval from=${targets[0]}
    eval to=${targets[1]}
        #if the target exists and is not a symlink, err on the side of caution
        if [ -e "$to" -a ! -L "$to" ]
        then
            echo "$to exists and is not a link, skipping..."
        else
            #probably safe to delete an existing symlink
            if [ -e "$to" ]
            then
                rm $to
            fi
            ln -s $from $to
        fi
done

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12035.html,未经允许,请勿转载。