Zusammenfassung

Zusammenfassung

Zusammenfassung

Wenn ich eine neue Tmux-Sitzung erstelle, greift meine Eingabeaufforderung auf eine Standard-Bash-Konfiguration zurück und ich muss sie source ~/.bashrcfür meine angepasste Eingabeaufforderung manuell ausführen.

Analyse

Ich verwende eine RHEL 7-Maschine. Dieses Verhalten ist mir vor einiger Zeit nach einem Bash-Update aufgefallen, aber ich bin erst jetzt dazu gekommen, die Frage zu stellen (und bin mir nicht sicher, bei welchem ​​Update dies auftrat).

Ich habe beispielsweise meine Eingabeaufforderung so angepasst, dass sie folgendermaßen aussieht:

[user@hostname ~]$

Immer wenn ich eine neue Tmux-Sitzung starte, wird scheinbar die Bash-Standardeinstellung verwendet:

-sh-4.2$

Ein schneller Durchlauf source ~/.bashrcbehebt das Problem immer, aber es ist ärgerlich, dass ich das jedes Mal tun muss, wenn ich etwas Kleines beheben möchte. Irgendwelche Ideen, wie ich tmux dazu bringen kann, das wieder automatisch zu tun?

Wenn Sie weitere Informationen benötigen, stehe ich Ihnen gerne zur Verfügung.

tmux.conf

Als Referenz habe ich tmux.confunten meine Datei, obwohl man sie kaum als benutzerdefiniert bezeichnen könnte.

setw -g mode-keys vi

# reload tmux.conf
bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"

Antwort1

Dies bezieht sich auf die Bash-Init-Dateien. Standardmäßig ~/.bashrcwird in eineminteraktiv, ohne AnmeldungShell. Es wird nicht in einer Login-Shell verwendet. Tmux verwendet eineAnmeldeshellstandardmäßig. Daher werden von tmux gestartete Shells übersprungen ~/.bashrc.

default-commandShell-Befehl

Der Standardwert ist eine leere Zeichenfolge.welches tmux anweist, eine Login-Shell zu erstellenmithilfe des Werts der default-shellOption.

Init-Dateien für Bash,

  1. Login-Modus:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(nur das erste, das existiert)
  2. interaktiv Nicht-Login:
    1. /etc/bash.bashrc(einige Linux-Betriebssysteme; nicht unter Mac OS X)
    2. ~/.bashrc
  3. nicht interaktiv:
    1. Quelldatei in$BASH_ENV

Lösung

Die seltsame interaktive Ladeanforderung ohne Anmeldung verwirrt die Leute auch in anderen Situationen. Diebeste Lösungist die Änderung der Ladeanforderung ~/.bashrcvonnur interaktiv, und genau das tun einige Distributionen, beispielsweise 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.


Aktualisieren: Die obigen Einstellungen wurden von Ubuntu kopiert. Es scheint, dass sie sich dafür entscheiden, .bashrceine Login-Shell zu laden, unabhängig davon, ob es sich um eine interaktive Shell handelt oder nicht.

Wenn Sie eine interaktive Shell erkennen möchten, verwenden Sie $PS1.

if [ -n "$BASH_VERSION" -a -n "$PS1" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Verweise

Antwort2

Soweit ich weiß, wird standardmäßig tmuxeine Login-Shell ausgeführt. Wenn bashals interaktive Login-Shell aufgerufen wird, sucht es nach ~/.bash_profile, ~/.bash_login, und ~/.profile. Sie müssen also source ~/.bashrceine dieser Dateien einfügen.

Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, in Ihre Datei die folgende Zeile einzufügen .tmux.conf:

set-option -g default-shell "/bin/bash"

Antwort3

Folgendes hinzufügen zu .tmux.conf:

set-option -g default-shell "/bin/bash"

NICHTdas gewünschte Ergebnis erzielen.

Erst durch Zugabe wird source "$HOME/.bashrc"das ~/.bash_profilegewünschte Ergebnis erzielt.

Dies funktioniert bei einer aktiven Tmux-Sitzung beim Öffnen eines neuen Fensters oder Bereichs sowie beim Trennen und Öffnen einer neuen Tmux-Sitzung.

Getestet auf:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1

Antwort4

Ändern Sie Ihre $HOME/.tmux.confDatei wie folgt:

set-option -g default-shell "/usr/bin/bash"
set-option -g default-command bash

Damit sollte es erledigt sein. Und wenn Sie schon dabei sind, warum legen Sie die Dot-Datei nicht in den $HOME/.config/tmuxOrdner, in den sie gehört, ohne den Punkt? Und fügen Sie Farbausgabe und eine Tastenkombination zum Neuladen hinzu $HOME/.config/tmux/tmux.conf:

set -g default-terminal "screen256color"

bind r source-file "${HOME}/.config/tmux/tmux.conf"

Wenn tmux -V< 3.1, fügen Sie einen Alias ​​hinzu, $HOME/.bashrcum die Konfigurationsdatei von diesem Speicherort zu laden:

alias tmux="tmux -f ${HOME}/.config/tmux/tmux.conf"

Oder machen Sie eine systemweite Konfiguration am /etc/tmux.confStandardspeicherort.

verwandte Informationen