Các phiên tmux mới không nguồn tệp bashrc


17

Tóm lược

Khi tôi tạo một phiên tmux mới, lời nhắc của tôi lấy từ cấu hình bash mặc định và tôi phải chạy thủ công source ~/.bashrccho dấu nhắc tùy chỉnh của mình.

Phân tích

Tôi đang sử dụng máy RHEL 7. Tôi bắt đầu nhận thấy hành vi này sau khi cập nhật bash một lúc trước, nhưng vẫn không có câu hỏi nào cho đến bây giờ (và không chắc bản cập nhật này đã bắt đầu xảy ra xung quanh).

Ví dụ: tôi đã tùy chỉnh lời nhắc của mình giống như:

[user@hostname ~]$

Bất cứ khi nào tôi bắt đầu một phiên tmux mới, nó sẽ sử dụng cái có vẻ là mặc định bash:

-sh-4.2$

Một cách nhanh chóng source ~/.bashrcluôn khắc phục sự cố, nhưng thật khó chịu khi tôi phải làm điều này mỗi khi tôi muốn sửa một cái gì đó nhỏ. Bất kỳ ý tưởng về làm thế nào để có được tmux để làm điều này tự động một lần nữa?

Nếu cần thêm thông tin, tôi rất vui lòng cung cấp.

tmux.conf

Để tham khảo, tôi có tmux.conftập tin của tôi dưới đây, mặc dù hầu như không có gì bạn có thể gọi là tùy chỉnh.

setw -g mode-keys vi

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

Câu trả lời:


19

Theo tôi biết, theo mặc định tmuxchạy một vỏ đăng nhập. Khi bashđược gọi như một vỏ đăng nhập tương tác, nó sẽ tìm kiếm ~/.bash_profile, ~/.bash_login~/.profile. Vì vậy, bạn phải đặt source ~/.bashrcmột trong những tập tin đó.

Một cách khác để giải quyết vấn đề này là đưa vào tệp của bạn .tmux.confdòng:

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

1
Tôi đã thêm source ~/.bashrcdòng vào .bash_profile, thử đăng xuất và đăng nhập lại, tạo phiên tmux mới, nhưng không thay đổi. Có ý kiến ​​gì không?
Justin W. Flory

1
Cố gắng đặt trong tập tin của bạn .tmux.confdòng set-option -g default-shell "/bin/bash". Điều này sẽ giải quyết vấn đề của bạn (ít nhất là tôi hy vọng vậy)!
andurrh

Sau khi tải lại cấu hình tmux của tôi, điều này đã giải quyết vấn đề của tôi! Bạn muốn sửa đổi câu trả lời của bạn hoặc tạo một câu trả lời mới? Tôi sẽ rất vui khi đánh dấu nó là chấp nhận. :)
Justin W. Flory

Bạn thật tốt bụng, tôi đã nhanh chóng sửa đổi câu trả lời của mình!
andurrh

2
Lưu ý cho người dùng macOS: nếu bạn đã cài đặt bashqua Homebrew và điều này không hoạt động, hãy đổi "/bin/bash"thành "/usr/local/bin/bash".

4

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

default-command lệnh vỏ

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

Ban đầu tập tin 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 phải trên Mac OS X)
    2. ~/.bashrc
  3. không tương tác:
    1. tập tin nguồn trong $BASH_ENV

Giải pháp

Yêu cầu tải tương tác kỳ lạ, không đăng nhập cũng khiến mọi người nhầm lẫn 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 nên là giải pháp 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


2

Thêm phần sau vào .tmux.conf:

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

KHÔNG mang lại kết quả mong muốn.

Chỉ khi thêm source "$HOME/.bashrc"vào ~/.bash_profilekết quả dự định là đạt được.

Điều này sẽ hoạt động trên một phiên tmux hoạt động khi mở một cửa sổ hoặc khung mới và cả khi tách và mở một phiên tmux mới.

Đã thử nghiệm trên:

VERSION="16.04.2 LTS (Xenial Xerus)"
tmux 2.1
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.