.bashrc / .profile không được tải trên phiên (hoặc cửa sổ) tmux mới - tại sao?


94

Khi tmux khởi động hoặc mở một cửa sổ mới, nó không tải của tôi .profilehoặc .bashrc. Tôi kết thúc đánh máy . ~/.bashrcmọi lúc. Có cách nào để làm cho điều này xảy ra tự động không?

Câu trả lời:


146

Có, ở cuối của bạn .bash_profile, hãy đặt dòng:

. ~/.bashrc

Điều này tự động tạo nguồn cho tệp rc trong những trường hợp mà nó thường chỉ xử lý hồ sơ.

Các quy tắc về thời điểm bashchạy các tệp nhất định rất phức tạp và phụ thuộc vào loại trình bao được khởi động (đăng nhập / không đăng nhập, tương tác hay không, v.v.), cùng với các đối số dòng lệnh và biến môi trường.

Bạn có thể thấy chúng trong man bashđầu ra, chỉ cần tìm INVOCATION- có thể bạn sẽ cần một thời gian để hiểu và giải mã nó mặc dù :-)


2
Vấn đề với giải pháp này là trên một số hệ thống, .bashrc gọi .bash_profile.
Honza

1
Hãy để tôi tự sửa: hệ thống không có .bashrc gọi .bash_profile, nhưng bạn cần đảm bảo rằng bạn không tự làm.
Honza

1
@Honza, đó sẽ là một thiết lập bất thường nhất vì nó hầu như luôn theo chiều ngược lại. Có người chắc chắn có thể sắp xếp để làm điều đó theo cách đó nhưng chúng tôi sẽ phải đặt câu hỏi về sự tỉnh táo của họ :-)
paxdiablo

2
Thật vậy, hóa ra tôi đã sắp xếp để làm theo cách đó (và quên mất điều đó). Bạn có thể đặt câu hỏi cho sự tỉnh táo của tôi ...;)
Honza

3
Tôi nghĩ đó là câu hỏi ....bashrc/.profile is not loaded on new tmux session (or window) — why?
dylnmc

16

Chạy bash rõ ràng có tác dụng với tôi, bằng cách thêm dòng này vào tệp ~ / .tmux.conf của tôi:

set-option -g default-command "exec /bin/bash"

1
Điều này đã làm việc cho tôi! Tuy nhiên, bạn không cần phần "thi hành". Tôi đã thêm dòng sau vào tôi ~/.tmux.conf : set -g default-command "/bin/bash". Cảm ơn bạn đời.
joker

Nhưng, bạn có biết tại sao điều này lại xảy ra không? Tôi đột nhiên nhận thấy điều này sau khi nâng cấp từ Ubuntu 16.04 lên 18.04.2. Đây là sự khác biệt duy nhất tôi có thể nghĩ đến. Ngoài ra, tôi nhận thấy rằng một số cấu hình bị hỏng và tôi phải tuân thủ một số cú pháp mới (có vẻ như tmux cũng đã được cập nhật, nhưng tôi không nhớ phiên bản tmux mà tôi đã sử dụng để xác minh trước đây).
joker

6

Câu trả lời trước đây cung cấp giải pháp nhưng không giải thích lý do. Nó đây.

Điều này liên quan đến các tệp init Bash. Theo mặc định, ~/.bashrcđược sử dụng trong một trình bao tương tác, không đăng nhập . Nó sẽ không có nguồn trong trình bao đăng nhập. Tmux sử dụng trình bao đăng nhập theo mặc định. Do đó, các shell bắt đầu bởi tmux bỏ qua ~/.bashrc.

default-command lệnh shell

Mặc định là một chuỗi trống, nó hướng dẫn tmux tạo một trình bao đăng nhập bằng cách sử dụng giá trị của default-shelltùy chọn.

Init tệp cho Bash,

  1. chế độ đăng nhập:
    1. /etc/profile
    2. ~/.bash_profile, ~/.bash_login, ~/.profile(Chỉ có một đầu tiên mà tồn tại)
  2. tương tác không đăng nhập :
    1. /etc/bash.bashrc (một số Linux; không có trên Mac OS X)
    2. ~/.bashrc
  3. không tương tác:
    1. tệp nguồn trong $BASH_ENV

Yêu cầu tải tương tác kỳ lạ, không đăng nhập cũng gây nhầm lẫn cho mọi người trong các tình huống khác. Các giải pháp tốt nhất là thay đổi yêu cầu tải ~/.bashrcnhư chỉ tương tác , đó là chính xác những gì một số distro, như Ubuntu, đang làm.

# 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

Đây sẽ là giải pháp mà bạn mong muốn. Và tôi khuyên mọi người dùng Bash thiết lập điều này trong hồ sơ.

Người giới thiệu



1

Giải pháp phù hợp với tôi là:

  • Tạo một .bash_profiletệp nếu bạn không có trong~
  • Khi kết thúc .bash_profileđặt source ~/.bashrchoặcsource ~/.profile
  • Khởi động lại tmux.

Sự cố bây giờ sẽ được khắc phục.


0

Tôi đã gặp vấn đề tương tự và các giải pháp cho đến nay không hiệu quả với tôi. Giải pháp kết thúc làm việc cho tôi có thể được tìm thấy ở đây .

Nói ngắn gọn, tmux cửa sổ / phiên sử dụng trình bao đăng nhập tìm kiếm một ~/.profiletrong số các tệp khác khi nó khởi động.

Những gì tôi muốn là bắt đầu zsh với mỗi tmuxcửa sổ mới nên tôi đặt exec zshở cuối cửa sổ ~/.profile.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.