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

155

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

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

re5et
источник
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
DebugXYZ
источник
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, и все должно работать.

wyattdanger
источник
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.

mareoraft
источник
1
Это единственный ответ, который сработал для меня (команда tmux kill-server)
undefined
3

tmux использует SHELLпеременную окружения, поэтому должно работать следующее:

SHELL=/usr/bin/zsh tmux

или же

env SHELL=/usr/bin/zsh tmux
blueyed
источник
Не уверен, почему за это проголосовали. Кажется, это правильно: распространенная проблема - использовать другую оболочку, например, для iTerm, но оставить оболочку входа в систему, /bin/bashчтобы не допустить не итеративных разрывов. iTerm не установит $SHELLновое имя оболочки (не знаю, почему), а инициализация bash установит его в оболочку входа в систему, если он не установлен при запуске. Затем tmux использует это значение, если default-shellоно не установлено явно.
Сэм Брайтман
Ага .. может env SHELL=/usr/bin/zsh tmuxлучше? (обновил ответ).
синеватый
2

Используйте chsh(1):

chsh -s /bin/zsh $USER
amphetamachine
источник
1
у меня уже был этот набор, но tmux игнорировал его.
re5et
2

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

Патрик Чо
источник
1

Добавьте это в свой ~/.tmux.conf

set -g default-command /usr/local/bin/fish
IanVaughan
источник
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 . Проверьте это, это действительно круто.

anarchist912
источник
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