Sesi tmux baru tidak sumber file bashrc

17

Ringkasan

Ketika saya membuat sesi tmux baru, prompt saya menarik dari konfigurasi bash default dan saya harus menjalankan secara manual source ~/.bashrcuntuk prompt khusus saya.

Analisis

Saya menggunakan mesin RHEL 7. Saya mulai memperhatikan perilaku ini setelah pembaruan bash beberapa waktu lalu, tetapi belum sempat mengajukan pertanyaan sampai sekarang (dan saya tidak yakin pembaruan mana ini mulai terjadi di sekitar).

Misalnya, saya telah menyesuaikan permintaan saya agar terlihat seperti:

[user@hostname ~]$

Setiap kali saya memulai sesi tmux baru, ia menggunakan apa yang tampaknya menjadi default bash:

-sh-4.2$

Jalankan cepat source ~/.bashrcselalu memperbaiki masalah, tapi itu menjengkelkan bahwa saya harus melakukan ini setiap kali saya ingin memperbaiki sesuatu yang kecil. Ada ide tentang cara mendapatkan tmux untuk melakukan ini secara otomatis lagi?

Jika ada informasi lebih lanjut diperlukan, saya senang memberikannya.

tmux.conf

Untuk referensi, saya memiliki tmux.conffile saya di bawah ini, meskipun ini bukan apa yang Anda sebut kustom.

setw -g mode-keys vi

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

Jawaban:

19

Sejauh yang saya tahu, secara default tmuxmenjalankan shell login. Ketika bashdipanggil sebagai shell login interaktif, tampaknya untuk ~/.bash_profile, ~/.bash_login, dan ~/.profile. Jadi, Anda harus memasukkan source ~/.bashrcsalah satu file itu.

Cara lain untuk mengatasi masalah ini adalah dengan menempatkan file Anda .tmux.confdi baris:

set-option -g default-shell "/bin/bash"
andreatsh
sumber
1
Saya menambahkan source ~/.bashrcbaris ke .bash_profile, mencoba masuk dan kembali, membuat sesi tmux baru, tetapi tidak ada perubahan. Ada ide?
Justin W. Flory
1
Coba masukkan .tmux.confbaris file Anda set-option -g default-shell "/bin/bash". Ini harus menyelesaikan masalah Anda (setidaknya saya harap begitu)!
andreatsh
Setelah memuat ulang konfigurasi tmux saya, ini menyelesaikan masalah saya! Ingin mengubah jawaban Anda atau membuat yang baru? Saya akan senang menandainya sebagai diterima. :)
Justin W. Flory
Anda baik, saya dengan cepat mengubah jawaban saya!
andreatsh
2
Catatan untuk pengguna macOS: jika Anda telah menginstal bashmelalui Homebrew dan ini tidak berhasil, ubah "/bin/bash"ke "/usr/local/bin/bash".
5

Ini terkait dengan file init Bash. Secara default, ~/.bashrcdigunakan dalam shell interaktif dan non-login . Itu tidak akan bersumber di shell login. Tmux menggunakan shell login secara default. Karenanya, cangkang dimulai oleh tmux skip ~/.bashrc.

default-command perintah shell

Defaultnya adalah string kosong, yang memerintahkan tmux untuk membuat shell login menggunakan nilai default-shellopsi.

File init untuk Bash,

  1. mode masuk:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Hanya pertama yang ada)
  2. non-login interaktif :
    1. /etc/bash.bashrc (beberapa Linux; bukan pada Mac OS X)
    2. ~/.bashrc
  3. non-interaktif:
    1. file sumber dalam $BASH_ENV

Larutan

Interaktif, persyaratan memuat non-login aneh membingungkan orang-orang dalam situasi lain juga. The solusi terbaik adalah mengubah persyaratan pemuatan ~/.bashrcsebagai interaktif hanya , yang persis apa yang beberapa distro, seperti Ubuntu, lakukan.

# 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

Ini harus menjadi solusi yang Anda inginkan. Dan saya sarankan setiap pengguna Bash mengatur ini di profil.

Referensi

Simba
sumber
2

Menambahkan yang berikut ke .tmux.conf:

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

JANGAN menghasilkan hasil yang diinginkan.

Hanya ketika menambahkan source "$HOME/.bashrc"ke ~/.bash_profilehasil yang diinginkan tercapai.

Ini akan bekerja pada sesi tmux aktif ketika membuka jendela atau panel baru, dan juga ketika melepaskan dan membuka sesi tmux baru.

Diuji pada:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
Andres Salgado
sumber