Wenn tmux ein neues Fenster startet oder öffnet, wird mein .profileoder nicht geladen .bashrc. Am Ende schreibe ich . ~/.bashrcjedes Mal. Gibt es eine Möglichkeit, dies automatisch zu erreichen?
Wenn tmux ein neues Fenster startet oder öffnet, wird mein .profileoder nicht geladen .bashrc. Am Ende schreibe ich . ~/.bashrcjedes Mal. Gibt es eine Möglichkeit, dies automatisch zu erreichen?
Antworten:
Ja, am Ende von .bash_profilesetzen Sie die Zeile:
. ~/.bashrc
Dadurch wird die RC-Datei automatisch unter den Umständen abgerufen, unter denen normalerweise nur das Profil verarbeitet wird.
Die Regeln bashfür die Ausführung bestimmter Dateien sind kompliziert und hängen von der Art der zu startenden Shell (Anmeldung / Nichtanmeldung, interaktiv oder nicht usw.) sowie von Befehlszeilenargumenten und Umgebungsvariablen ab.
Sie können sie in der man bashAusgabe sehen, suchen INVOCATIONSie einfach nach - Sie werden wahrscheinlich etwas Zeit brauchen, um sie zu verdauen und zu dekodieren :-)
.bashrc/.profile is not loaded on new tmux session (or window) — why?
Das Ausführen von bash hat explizit für mich funktioniert, indem diese Zeile zu meiner ~ / .tmux.conf-Datei hinzugefügt wurde:
set-option -g default-command "exec /bin/bash"
~/.tmux.conf : set -g default-command "/bin/bash". Danke Kumpel.
Frühere Antworten lieferten Lösungen, erklärten jedoch nicht den Grund. Hier ist es.
Dies hängt mit den Bash-Init-Dateien zusammen. Wird standardmäßig ~/.bashrcin einem interaktiven Nicht-Login verwendet Shell . Es wird nicht in einer Login-Shell bezogen. Tmux verwendet standardmäßig eine Login-Shell . Daher werden Shells, die mit tmux gestartet wurden, übersprungen ~/.bashrc.
default-commandShell-BefehlDer Standardwert ist eine leere Zeichenfolge. die tmux anweist, eine Anmeldeshell mit dem Wert der
default-shellOption zu erstellen .
Init-Dateien für Bash,
/etc/profile~/.bash_profile, ~/.bash_login,~/.profile (Nur erste, das vorhanden ist )/etc/bash.bashrc (einige Linux; nicht unter Mac OS X)~/.bashrc$BASH_ENVDie seltsame interaktive Anforderung, keine Logins zu laden, verwirrt die Leute auch in anderen Situationen. Die beste Lösung besteht darin , die Ladeanforderung nur~/.bashrc als interaktiv zu ändern. Genau das tun einige Distributionen wie Ubuntu.
# write content below into ~/.profile, or ~/.bash_profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Dies sollte die gewünschte Lösung sein. Und ich empfehle jedem Bash-Benutzer, dies im Profil einzurichten.
Verweise
man tmuxAus diesem Thread:
scheint mit .bash_profilewürde funktionieren.
$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
Die Lösung, die für mich funktioniert hat, ist die folgende:
.bash_profile Datei, wenn Sie keine haben~.bash_profilePutsource ~/.bashrc odersource ~/.profileDas Problem sollte jetzt behoben sein.
Ich hatte das gleiche Problem und die Lösungen haben bisher bei mir nicht funktioniert. Die Lösung, die letztendlich für mich funktioniert hat, finden Sie hier .
Kurz gesagt, tmuxWindows / Sessions verwenden eine Anmeldeshell, die ~/.profilebeim Start unter anderem nach einer anderen Datei sucht .
Was ich wollte, war, dass zsh mit jedem neuen tmuxFenster beginnt, damit ich es exec zsham Ende meines Fensters platziere ~/.profile.