Làm cách nào để tmux sử dụng shell mặc định của tôi?


155

Trên một thiết lập mới, tmux đang sử dụng bash thay vì mặc định của tôi (zsh).

Làm thế nào tôi có thể buộc nó sử dụng zsh?


12
tìm ra. Có thể thiết lập các mục sau trong cấu hình tmux: set -g default-lệnh / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, bạn không cần đặt lệnh mặc định nếu bạn đã đặt shell mặc định.
Nicholas Riley

Câu trả lời:


200
set-option -g default-shell /bin/zsh

trong ~/.tmux.confhoặc /etc/tmux.conf. Hoạt động trên Fedora.

Bạn có thể phải khởi động lại tmux với killall tmux; tmux


5
Nếu điều này không hiệu quả với bạn thì hãy chắc chắn rằng bạn đã khởi động lại tmux. Có vẻ rõ ràng nhưng tôi đã mất một giờ tốt để tìm ra!
Andy Smith

27
BTW: Khởi động lại phương tiện tmux killall tmux; tmux. Mất khá nhiều thời gian để tìm hiểu.
js-coder

5
Configs có thể được nạp lại mà không giết chết một máy chủ:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ

14
Hoặc đơn giản là chạy tmux source-file ~/.tmux.conftừ dòng lệnh.
Petr Pudlák

12
@ js-coder: để giết sạch hơn máy chủ tmux của bạn, tôi muốn giới thiệu tmux kill-serverthay thế.
Chuim

41

Trước tiên, đảm bảo shell mặc định của bạn được đặt đúng thành zsh thông qua việc chạy này trong dòng lệnh của bạn:

chsh -s $(`which zsh`) $USER

Đặt dấu phẩy trong ~ / .tmux.conf của bạn là một tùy chọn mạnh mẽ hơn cho mọi vỏ.

set-option -g default-shell $SHELL

1
Không cần thiết phải đặt shell người dùng ( chsh -s) vì tmux cung cấp tùy chọn độc lập với điều đó.
Mahmoud Al-Qudsi

Tôi nghĩ rằng sẽ mạnh mẽ hơn khi sử dụng biến $ SHELL. Nhưng nó thêm một bước và nhầm lẫn vì vậy tôi thích câu trả lời được chấp nhận hơn.
DebugXYZ

Điều này tốt hơn câu trả lời được chấp nhận. Zsh của tôi không được cài đặt trong / bin / zsh.
HappyFace

20

Thả dòng này ở dưới cùng của bạn ~/.tmux.conf

set-option -g default-command "reattach-to-user-namespace -l zsh"

Sau khi bạn thêm nó, giết và khởi động lại máy chủ tmux của bạn và tất cả sẽ hoạt động.


2
Er, có bất kỳ dấu hiệu nào cho thấy re5et (OP) trên máy Mac hay chương trình trình bao bọc đó đã được cài đặt không?
Chris Johnsen

1
Tôi nghĩ rằng câu trả lời này chỉ hoạt động cho Mac OS X
EhevuTov

5
tmux kill-serverlà lệnh kết thúc tất cả các máy chủ tmux
Keith Smiley

1
Mặc dù đó không phải là câu trả lời mà OP yêu cầu, tôi đã kết thúc chủ đề này và thực sự tôi đang dùng OS X, sử dụng trình bao bọc này và đây là giải pháp tôi cần; cảm ơn bạn!
Jose Alban

1
Điều này khác với set-option -g default-shell như thế nào? ở trên dường như không hoạt động với vỏ Cá.
Tommy

5

Nếu bạn muốn buộc tmux sử dụng cùng một vỏ như được chỉ định trong biến môi trường của mình, bạn có thể sử dụng:

# force SHELL ENV variable as shell
set-option -g default-shell ${SHELL}

trong ~/.tmux.confhoặc của bạn /etc/tmux.conf.

Để có được sự thay đổi để thực sự có hiệu lực, bạn có thể cần phải tmux kill-servervà sau đó tmuxkhởi động lại tmux.


1
Đây là câu trả lời duy nhất có hiệu quả với tôi (lệnh tmux kill-server)
không xác định


2

Đăng xuất và đăng nhập lại đã khắc phục vấn đề của tôi. Khi lặp lại, $SHELLnó vẫn còn /bin/bashnhưng sau khi đăng xuất, nó đã được đổi thành/usr/bin/zsh


2

tmux dường như sử dụng SHELLbiến môi trường, do đó, nên hoạt động như sau:

SHELL=/usr/bin/zsh tmux

hoặc là

env SHELL=/usr/bin/zsh tmux

Không chắc chắn tại sao điều này đã được bỏ phiếu. Có vẻ đúng: một vấn đề phổ biến là sử dụng một shell khác, ví dụ iTerm nhưng để lại shell đăng nhập /bin/bashđể đảm bảo không có gì phá vỡ không lặp. iTerm sẽ không được đặt thành $SHELLtên shell mới (không chắc chắn tại sao) và khởi tạo bash sẽ đặt nó vào shell đăng nhập nếu không được đặt khi khởi động. tmux sau đó sử dụng giá trị này nếu default-shellkhông được đặt rõ ràng.
Sam Brightman

Vâng .. có lẽ env SHELL=/usr/bin/zsh tmuxlà tốt hơn? (cập nhật câu trả lời).
xanh lam

1

Thêm cái này vào ~/.tmux.conf

set -g default-command /usr/local/bin/fish

1

Câu trả lời được chấp nhận không làm việc cho tôi.

Tôi đã phải viết cả

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

set -g default-commanmd "/bin/bash"

trong tôi ~/.tmux.conf- Đừng quên tmux kill-server; tmux, để tải lại tmux.conf


Tôi đang sử dụng tmux -V2.6 trong Ubuntu 18 trong trình giả lập shell gnome.

Tôi cũng đã tăng cường tmux với https://github.com/samoshkin/tmux-config . Kiểm tra xem, nó thực sự mát mẻ.


0

Đối với tôi, tôi đã phải thay thế:

default-command "/usr/local/bin/fish"
default-shell "/usr/local/bin/fish"

với

set-option -g default-command "/usr/local/bin/fish"
set-option -g default-shell "/usr/local/bin/fish"

trong .tmux.conf và chạy lệnhtmux kill-server; tmux


Đây là bản sao câu trả lời superuser.com/a/1370909/174140 .
174140

@john Tôi đã sử dụng set-option -gthay vì set -g. các phiên bản khác nhau của tmux có lẽ nhất
Ali Amin

setlà một bí danh cho set-option.
174140
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.