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

Ala*_*ody 23 bash dropbox

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

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

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

fra*_*ous 28

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

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

  mkdir -p ~/Dropbox/dotfiles
  mv ~/.bashrc ~/Dropbox/dotfiles/.bashrc
  ln -s ~/Dropbox/dotfiles/.bashrc ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

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

另一种选择是您可以在 dropbox 文件夹中创建一个文件,由您的.bashrc

即,在您的.bashrc, 中放置:

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

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

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


and*_*ing 9

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

要在您的~/.bashrc添加中包含一个单独的文件,如下所示:

if [ -f ~/.foo ]; then
    . ~/.foo
fi
Run Code Online (Sandbox Code Playgroud)

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

  • 你是对的!但幸运的是,Dropbox 会保留您文件的修订版本,因此内容会自动备份 :) (2认同)

Flo*_*man 6

通常,集中配置文件是一件好事!如果要自定义基于给定操作系统或主机名运行的内容,可以在 .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
Run Code Online (Sandbox Code Playgroud)

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

我将所有这些文件保存在 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
Run Code Online (Sandbox Code Playgroud)