.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?

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 :-)


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"

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



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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.