.bashrc / .profile tidak dimuat pada sesi (atau jendela) tmux baru - mengapa?

94

Saat tmux memulai atau membuka jendela baru, tmux tidak memuat my .profileatau .bashrc. Saya akhirnya mengetik . ~/.bashrcsetiap saat. Adakah cara untuk membuat ini terjadi secara otomatis?

John Smith
sumber

Jawaban:

146

Ya, di akhir Anda .bash_profile, letakkan baris:

. ~/.bashrc

Ini secara otomatis mengambil file rc dalam keadaan di mana biasanya hanya akan memproses profil.

Aturan tentang kapan bashmenjalankan file tertentu rumit, dan bergantung pada jenis shell yang dimulai (login / non-login, interaktif atau tidak, dan sebagainya), bersama dengan argumen baris perintah dan variabel lingkungan.

Anda dapat melihatnya di man bashkeluaran, cari saja INVOCATION- Anda mungkin perlu waktu untuk mencerna dan mendekodekannya :-)

paxdiablo
sumber
2
Masalah dengan solusi ini adalah pada beberapa sistem, .bashrc memanggil .bash_profile.
Honza
1
Biarkan saya mengoreksi diri sendiri: sistem tidak memiliki panggilan .bashrc .bash_profile, tetapi Anda perlu memastikan bahwa Anda tidak melakukannya sendiri.
Honza
1
@Honza, itu akan menjadi penyiapan yang paling tidak biasa karena hampir selalu sebaliknya. Seseorang pasti dapat mengatur untuk melakukannya dengan cara itu, tetapi kami harus mempertanyakan kewarasan mereka :-)
paxdiablo
2
Memang, ternyata saya telah mengatur untuk melakukannya seperti itu (dan melupakannya). Anda dipersilakan untuk mempertanyakan kewarasan saya ...;)
Honza
3
Saya pikir itulah pertanyaannya ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc
16

Menjalankan bash secara eksplisit bekerja untuk saya, dengan menambahkan baris ini ke file ~ / .tmux.conf saya:

set-option -g default-command "exec /bin/bash"
Keith
sumber
1
Ini berhasil untuk saya! Namun, Anda tidak memerlukan bagian "exec". Saya menambahkan baris berikut ke saya ~/.tmux.conf : set -g default-command "/bin/bash". Terima kasih sobat.
joker
Tapi, apakah Anda tahu mengapa ini terjadi? Saya tiba-tiba memperhatikan ini setelah memutakhirkan dari Ubuntu 16.04 ke 18.04.2. Inilah satu-satunya perbedaan yang dapat saya pikirkan. Juga, saya perhatikan bahwa beberapa konfigurasi rusak dan saya harus mematuhi beberapa sintaks baru (sepertinya tmux juga diperbarui, tetapi saya tidak ingat versi tmux yang sebelumnya saya gunakan untuk memverifikasi).
joker
6

Jawaban sebelumnya memberikan solusi tetapi tidak menjelaskan alasannya. Ini dia.

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

default-command perintah shell

Standarnya adalah string kosong, yang menginstruksikan 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 di Mac OS X)
    2. ~/.bashrc
  3. non-interaktif:
    1. file sumber dalam $BASH_ENV

Persyaratan pemuatan non-login yang interaktif dan aneh membingungkan orang-orang di 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 merekomendasikan setiap pengguna Bash mengatur ini di profil.

Referensi

Simba
sumber
1

Dari utas ini:

tampaknya menggunakan .bash_profileakan berhasil.

icyrock.com
sumber
Tautan tersebut hanya memberikan saran untuk menggunakan:$echo case $- in *i*) . ~/.bashrc;; esac >> .bash_profile
Kjell
1

Solusi yang berhasil untuk saya adalah sebagai berikut:

  • Buat .bash_profilefile jika Anda tidak memilikinya~
  • Di akhir .bash_profileput source ~/.bashrcatausource ~/.profile
  • Mulai ulang tmux.

Masalahnya sekarang harus diperbaiki.

Jaco Malan
sumber
0

Saya memiliki masalah yang sama dan solusi sejauh ini tidak berhasil untuk saya. Solusi yang akhirnya berhasil untuk saya dapat ditemukan di sini .

Singkatnya, tmuxwindows / session menggunakan shell login yang mencari di ~/.profileantara file-file lain saat dijalankan.

Yang saya inginkan adalah memulai zsh dengan setiap tmuxjendela baru, jadi saya meletakkannya exec zshdi bagian bawah jendela ~/.profile.

Kellie Lutze
sumber