Як я можу змусити tmux використовувати свою оболонку за замовчуванням?


155

У нових налаштуваннях tmux використовує bash замість мого замовчування (zsh).

Як змусити його використовувати zsh?


12
з'ясував це. У налаштуваннях tmux можна встановити наступне: встановити -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, вам не потрібно встановлювати команду default, якщо ви встановили shell-shell.
Ніколас Райлі

Відповіді:


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

в ~/.tmux.confабо /etc/tmux.conf. Працює над Fedora.

Можливо, вам доведеться перезапустити tmux за допомогою killall tmux; tmux


5
Якщо це не допоможе вам, тоді переконайтеся, що ви перезапустите tmux. Здається, очевидно, але мені знадобилася гарна година, щоб розібратися!
Енді Сміт

27
BTW: Перезапуск засобів tmux killall tmux; tmux. Мені потрібно було досить довго розібратися.
js-coder

5
Конфігурації можна перезавантажити, не вбиваючи сервер:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ

14
Або просто запустіть tmux source-file ~/.tmux.confз командного рядка.
Петро Пудлак

12
@ js-coder: для більш чистого вбивства вашого tmux-сервера я б рекомендував tmux kill-serverзамість цього.
Чуїм

41

Спочатку переконайтеся, що для оболонки за замовчуванням встановлено належним чином zsh, запустивши це у своєму командному рядку:

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

Розміщення сліду у вашому ~ / .tmux.conf - більш надійний варіант для будь-якої оболонки.

set-option -g default-shell $SHELL

1
Не потрібно встановлювати оболонку користувача ( chsh -s), оскільки tmux пропонує опцію, незалежну від цього.
Махмуд Аль-Кудсі

Я вважав, що більш надійним є використання змінної $ SHELL. Але це додає додатковий крок і розгубленість, тому я віддаю перевагу прийнятій відповіді.
DebugXYZ

Це краще, ніж прийнята відповідь. Мій zsh не встановлений у / bin / zsh.
HappyFace

20

Опустіть цю лінію внизу вашого ~/.tmux.conf

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

Після цього ви вкажіть і перезапустіть сервер tmux, і все повинно працювати.


2
Е, чи є ознака того, що re5et (OP) працює на Mac, чи встановлена ​​програма обгортки?
Кріс Джонсен

1
Я думаю, що ця відповідь працює лише для Mac OS X
EhevuTov

5
tmux kill-server- команда припинити всі сервери tmux
Кіт Смілі

1
Хоча це була не відповідь, яку вимагав ОП, я опинився в цій темі, і справді я перебуваю на OS X, використовуючи цю обгортку, і це потрібне мені рішення; тож Дякую!
Хосе Альбан

1
чим це відрізняється від set-option -g default-shell ? вище, здається, не працює з рибною оболонкою.
Томмі

5

Якщо ви хочете змусити tmux використовувати ту саму оболонку, що вказана у змінній вашого середовища, ви можете використовувати:

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

у вашому ~/.tmux.confабо /etc/tmux.conf.

Щоб зміни фактично набули чинності, вам може знадобитися, tmux kill-serverа потім tmuxперезапустити tmux.


1
Це єдина відповідь, яка працювала на мене (команда tmux kill-server)
визначено


2

Вихід із системи та вхід знову вирішили мою проблему. Коли відлуння $SHELLвсе ще було, /bin/bashале після виходу з нього було змінено на/usr/bin/zsh


2

tmux, як видається, використовує SHELLзмінну оточення, тому слід працювати наступне:

SHELL=/usr/bin/zsh tmux

або

env SHELL=/usr/bin/zsh tmux

Не впевнений, чому це було знято. Схоже, це правильно: поширена проблема полягає в використанні іншої оболонки для iTerm, але, залишаючи оболонку входу, /bin/bashщоб не забезпечити нічого неітерактивного розриву. iTerm не встановить $SHELLнове ім'я оболонки (не знаю чому), а ініціалізація bash встановить його в оболонку входу, якщо вона не встановлена ​​при запуску. tmux тоді використовує це значення, якщо default-shellвоно не встановлено явно.
Сем Брайтман

Так ... може env SHELL=/usr/bin/zsh tmux, краще? (оновлена ​​відповідь).
синенький


1

Прийнята відповідь не спрацювала для мене.

Я повинен був написати і те, і інше

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

і

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

по-моєму ~/.tmux.conf- Не забувай tmux kill-server; tmux, щоб перезавантажити tmux.conf


Я використовую tmux -V2.6 під Ubuntu 18 в емуляторі gnome-shell.

Я також покращив tmux за допомогою https://github.com/samoshkin/tmux-config . Перевірте це, це дійсно круто.


0

Мені довелося замінити:

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

з

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

в .tmux.conf і запустити командуtmux kill-server; tmux


Це дублікат відповіді superuser.com/a/1370909/174140 .
174140,

@john я використовував set-option -gзамість цього set -g. різні версії tmux швидше за все
Алі Амін,

setпсевдонім для set-option.
174140,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.