當前位置: 首頁>>技術教程>>正文


使用 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/zh-tw/article/12035.html,未經允許,請勿轉載。