Verschieben von .bash_profile nach Dropbox

9

Ich möchte mein .bash_profile nach Dropbox verschieben, damit meine benutzerdefinierten Terminalfunktionen auf allen meinen Macs verfügbar sind. Ist das möglich und gibt es mögliche Auswirkungen?

Zum Beispiel habe ich einen Befehl zum gleichzeitigen Hinzufügen und Festschreiben eines Git:

function gax() {
    git add .
    git commit -m "$1"
}

Ich konnte keine Informationen dazu finden.

Swelet
quelle
2
Ich weiß, dass Sie bereits eine Antwort erhalten haben, aber ich denke darüber nach, nur einen Softlink zur Dropbox .bash_profile zu erstellen. Etwas zum Nachdenken.
JMY1000
@ JMY1000 Mit meiner Lösung können Sie abhängig von der Maschine, auf der Sie sich befinden, zusätzliche Dinge einfügen - setzen Sie einfach die Befehle nach der ifAnweisung. Aber Sie haben Recht, dies könnte auch ein Symlink sein.
Mateusz Szlosek
2
ln -s ~/path/to/dropbox/bash_profile_file ~/.bash_profile
2426021684

Antworten:

18

Sie können eine zusätzliche Datei im Dropbox-Ordner haben und dann auf jedem Computer in Ihrer .bash_profileDatei Folgendes ablegen:

FILE="/path/to/DropboxFolder/shared_bash_profile_file"
if [ -f $FILE ];
then
    source $FILE
fi
Mateusz Szlosek
quelle
5
Da FILE für andere Apps und dergleichen verwendet werden kann, möchten Sie die Variable nachts so etwas wie "DROPBOX-RC"
benennen
4

Ich denke, es ist besser, in ein Repository hochzuladen. Lassen Sie mich Ihnen sagen, wie ich es gemacht habe.

Ich versioniere das gesamte ~/binVerzeichnis. Mein .bash_profileist in diesem Verzeichnis. Das $HOME/.bash_profileist ein Link zu ~/bin/.bash_profile.

Mein .bash_profilesieht so aus:

if [[ $OSTYPE == darwin* ]]; then
    . ~/bin/includes/exports-osx.sh
    . ~/bin/includes/bash-stuff-osx.sh
    . ~/bin/includes/aliases-osx.sh
    . ~/bin/includes/functions-osx.sh
elif [[ $OSTYPE == linux* ]]; then
    . ~/bin/includes/exports-linux.sh
    . ~/bin/includes/terminal-linux.sh
    . ~/bin/includes/aliases-linux.sh
    . ~/bin/includes/ssh-keys-linux.sh
    . ~/bin/includes/bash-stuff-linux.sh
fi

. ~/bin/includes/bash-stuff.sh
. ~/bin/includes/aliases.sh
. ~/bin/includes/powerline.sh
. ~/bin/includes/functions.sh
. ~/bin/includes/work-stuff.sh

Auf diese Weise kann ich Änderungen problemlos verfolgen.

Um das Repo-Update beizubehalten, können Sie ein Cron- oder LaunchAgents-Skript erstellen, das die Änderungen ~/bineinmal täglich in Ihrem Verzeichnis abruft :

cd ~/bin && git pull origin $(git name-rev --name-only HEAD)
jherran
quelle
2
Welche Vorteile hätte dies gegenüber der einfachen Lösung, die Mateusz vorstellte?
Swelet
2
@swelet aus meiner Sicht zwei Hauptvorteile: Sie können Änderungen einfach auf einen Punkt zurücksetzen und jede Änderung verfolgen.
jherran
@jherran Oder Sie können das Git-Repo auch in den Dropbox-Ordner legen. Ich denke allerdings, dass Dropbox selbst eine Versionierung hat.
Pydsigner
2
@pydsigner Ich hatte Probleme mit einem Git-Repo in Dropbox. Ich vermute die Rennbedingungen, da Dropbox versucht, Änderungen an einer Datei zu synchronisieren, die Git dann erneut zu öffnen versucht, während sie noch verwendet wird.
Millimoose
Diese Lösung verwendet implizit ein öffentliches Repo für eine kritische Systemdatei, was zu Sicherheitsproblemen führen kann. Dropbox und andere sind privat.
New Alexandria
4

Es ist keine gute Idee, das Ganze .bash_profilein Dropbox zu platzieren, entweder durch Ändern der Dropbox-Pfade oder über einen Symlink. Unterschiedliche Computer erfordern möglicherweise geringfügig unterschiedliche Inhalte dieser Datei. Beispiele: Verschiedene installierte Softwareversionen erfordern unterschiedliche Konfiguration, unterschiedliche Pfade, unterschiedliche Namen für Dinge wie Partitionen unter /dev/.

Tun Sie dies stattdessen: Fügen Sie alle Ihre benutzerdefinierten Funktionen und Aliase in eine Datei ein und fügen Sie $HOME/Dropbox/my_functions.shdann die Zeile ein

. $HOME/Dropbox/my_functions.sh

in deinem .bash_profile.

Federico Poloni
quelle