Как я могу заставить tmux использовать мою оболочку по умолчанию?


155

В новой настройке tmux использует bash вместо моего по умолчанию (zsh).

Как я могу заставить его использовать Zsh?


12
догадаться. Можно установить следующее в конфигурации tmux: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, вам не нужно устанавливать команду default, если вы установили default-shell.
Николас Райли

Ответы:


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

в ~/.tmux.confили /etc/tmux.conf. Работает на Fedora.

Возможно, вам придется перезапустить Tmux с killall tmux; tmux


5
Если это не работает для вас, убедитесь, что вы перезапустите tmux. Кажется очевидным, но мне понадобился хороший час, чтобы понять!
Энди Смит

27
Кстати: перезапуск tmux означает killall tmux; tmux. Мне потребовалось некоторое время, чтобы понять.
JS-кодер

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

3

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лучше? (обновил ответ).
синеватый


2

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



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,

@ Джон, я использовал set-option -gвместо set -g. разные версии tmux скорее всего
Али Амин

setэто псевдоним для set-option.
174140
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.