Ich habe einige Dinge, die ich in .bashrc ausführen möchte, die ich lieber in einer anderen Datei auf dem System haben würde. Wie kann ich diese Datei in .bashrc aufnehmen?
Ich habe einige Dinge, die ich in .bashrc ausführen möchte, die ich lieber in einer anderen Datei auf dem System haben würde. Wie kann ich diese Datei in .bashrc aufnehmen?
Antworten:
Fügen Sie source /whatever/file
(oder . /whatever/file
) hinzu, .bashrc
wo die andere Datei enthalten sein soll.
Um Fehler zu vermeiden, müssen Sie zuerst überprüfen, ob die Datei vorhanden ist. Dann Quelle der Datei. Mach so etwas.
# include .bashrc if it exists
if [ -f $HOME/.bashrc_aliases ]; then
. $HOME/.bashrc_aliases
fi
if [ -f ~/.bashrc_aliases ];
funktioniert nicht.
Hier ist ein Einzeiler!
[ -f $HOME/.bashrc_aliases ] && . $HOME/.bashrc_aliases
Lustige Tatsache: Shell (und die meisten anderen Sprachen) sind faul. Wenn es eine Reihe von Bedingungen gibt, die durch eine Konjunktion (aka "und" aka &&
) verbunden sind, beginnt die Auswertung von links nach rechts. In dem Moment, in dem eine der Bedingungen falsch ist, werden die restlichen Ausdrücke nicht ausgewertet, wodurch andere Ausdrücke effektiv "kurzgeschlossen" werden.
Sie können also einen Befehl, den Sie ausführen möchten, rechts neben eine Bedingung stellen. Er wird erst ausgeführt, wenn jede Bedingung links als "wahr" bewertet wird.
Wenn Sie mehrere Dateien laden möchten, die möglicherweise vorhanden sind oder nicht, können Sie sie mithilfe einer for-Schleife etwas elegant halten.
files=(somefile1 somefile2)
path="$HOME/path/to/dir/containing/files/"
for file in ${files[@]}
do
file_to_load=$path$file
if [ -f "$file_to_load" ];
then
. $file_to_load
echo "loaded $file_to_load"
fi
done
Die Ausgabe würde folgendermaßen aussehen:
$ . ~/.bashrc
loaded $HOME/path/to/dir/containing/files/somefile1
loaded $HOME/path/to/dir/containing/files/somefile2