Я бы хотел, чтобы моя оболочка bash по умолчанию шла прямо в tmux, вместо того, чтобы постоянно вводить tmux каждый раз.
79
Это похоже на работу ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Просто добавьте следующую строку кода bash в ваш .bashrc перед вашими псевдонимами; код для других оболочек очень похож:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && return
чтобы не быть бесконечным циклом (с той же страницы)TERM
пользователя может иметь другое значение.tmux.conf
. Лучше проверить, установлена лиTMUX
переменная или нет.Ответ @ StarNamer, как правило, точный, хотя я обычно включаю следующие тесты, чтобы убедиться, что (1) tmux существует в системе, (2) мы в интерактивной оболочке и (3) tmux не пытается работать в сам:
Рекомендации
command
для проверки существования команды - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
вместоwhich
проверки наличия команд - https://unix.stackexchange.com/a/85250$PS1
для проверки интерактивной оболочки - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
переменной среды "для всех программ, работающих в tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESисточник
command
прежде, но не понимал, что это существовало.exec
утверждение не позволяет вам выйти из tmux без выхода из всего терминала! : |exec
заменяет текущий процесс новым - в этом случае он заменяет оболочку входа в bash на tmux, поэтому при выходе из tmux нет другого терминала, к которому можно было бы вернуться :)exec tmux
на предпочитаемый вами вариантtmux attach
exec tmux
использовать его, уexec tmux new-session -A -s main
меня всегда будет сеанс с именем main, и я присоединяюсь к нему (вместо создания нового сеанса каждый раз, когда я подключаюсь к своей удаленной машине), но он не завершится сбоем, как при использовании,tmux attach
если сеанс недоступен (находится здесь: unix.stackexchange.com/a/176885/256942 )Добавление строки как
в вашем файле bashrc, вероятно, сделает эту работу. Обратите внимание, что эта строка выйдет из ssh и завершит соединение, как только вы отсоединитесь или выйдите из tmux. Мне нравится эта конфигурация, поскольку она сохраняет нажатия клавиш для разрыва соединения. Но если вы не любите это (что я считаю очень маловероятным) и предпочитаете оставаться в оболочке входа после завершения, просто удалите
exit
часть:Также обратите внимание , вы не должны обернуть
tmux attach
сexec
, так как это может привести соединение будет закрыто , когда нет tmux сессий прикрепиться к.источник
Есть команда,
chsh
которая меняет оболочку входа в систему. Consultman chsh
.источник
tmux
это не оболочка, это терминальный мультиплексор, такой как экран GNU. Интересно, что он поддерживает-c
опцию в соответствии с man-страницей , поэтому он может работать как оболочка, достаточная для использования в качестве оболочки входа в систему, но я подозреваю, что она не будет работать должным образом во всех ситуациях, например, при графическом входе через gdm / kdm. ,ssh $some_server echo foo
)./etc/shells
, так что это действительная оболочка входа в систему.default-shell
параметр в конфигурации tmux, чтобы он указывал на фактическую оболочку.Я успешно использую
по моему
.zshrc
. Если вы используете bash, поместите его в свой.bashrc
.Я также только что попытался установить в
tmux
качестве моей оболочки по умолчанию (chsh -s $(which tmux)
), и это, кажется, нарушает прямое выполнение команды через SSH, напримерssh $some_server echo foo
, не будет производить никакого вывода.источник
Перейти к терминальным настройкам.
А затем нажмите на «командную» панель.
Установите флажок «Запустить пользовательскую команду вместо моей продажи» и напишите любую команду, которую вы хотите выполнить при запуске вашего терминала.
источник
Ни один из приведенных выше ответов
exec tmux
не помог мне - не позволяет мне закрыть tmux, не выходя из оболочки (независимо от того, открывается ли он с помощьюCtrl
+T
или из меню приложения).Я использую Linux Mint, который позволяет вам отображать определенные горячие клавиши на команды, и (некошерно, как это может быть на некоторых ..) У меня есть оболочки bash с командами, начинающимися там, например,
Win
+Alt
+B
делает какое-то замысловатоеbash -exec(vim)
выражение для отредактируйте мой .bashrc, чтобы он действовал как обычная оболочка.tmux загружается, а не vim в этой ситуации после размещения вышеупомянутого в верхней части моего
.bashrc
. Я завернул строку выполнения tmux в другой оператор if, проверив, что он работает в интерактивном режиме.Вы можете поместить все это в одну строку, но для удобства чтения я думаю, что это нормально.
источник
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
В дополнение к ответу @Louis Maddox я выполню часть tmux с;
источник
exec sh -c 'tmux a || tmux'
, что (после просмотра вашего ответа), вероятно, приведет к тому, что плохие вещи произойдут, если tmux не сможет запуститься по какой-либо причине ..... спасибо, теперь я буду использовать вашу :)tmux new -A -s mysession
вероятно, тоже будет работать.Это по моему
~/.profile
(я используюksh93
):Если
TMUX
переменная окружения не установлена / пуста, значит, мы не в сеансе tmux, так что ...Если
tmux has-session
возвращается с нулевым статусом выхода (true), существует доступный сеанс для присоединения. Прикрепить к нему.Если нет, создайте новый сеанс.
Также возможно использовать в
tmux
качестве оболочки для входа. Однако, если вы сделаете это, убедитесь, чтоdefault-shell
в вашем~/.tmux.conf
файле установлена фактическая оболочка (дополнительную информацию об этом смотрите в руководстве по tmux).источник
Вы можете (и на данный момент, вероятно, должны) использовать
chsh
команду для установки tmux в качестве оболочки по умолчанию, а затем добавить следующее в.tmux.conf
:Просто не забудьте изменить путь в конце строки.
источник
Я объединил обширные проверки с условной проверкой сеанса и включил в нее свой собственный анализ, чтобы создать сеанс по умолчанию, который подключен или еще создан. Если вы не находитесь в другом сеансе tmux или не выполняются другие защитные условия.
На основании этих ответов:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
источник
Добавьте это в свой
~/.tmux.conf
источник
Как уже отмечал в своем комментарии Микель, использование tmux в качестве оболочки для входа может иметь побочные эффекты. Но вы можете сделать
tmux
вашу оболочку по умолчанию, буквально. Пользовательская оболочка по умолчанию определена в / etc / passwd. Таким образом, вы можете стать пользователем root и отредактировать / etc / passwd, например,sudo vi /etc/passwd
поиск строки, начинающейся с вашего имени пользователя. Это, вероятно, заканчивается:/bin/bash
. Измените / bin / bash на / usr / bin / tmux, и теперь tmux - это ваша оболочка входа по умолчанию.Однако нет никаких гарантий, что это не вызовет проблем!
Что может работать лучше, так это НЕ делать ничего, что требует привилегий root. Я попытался бы создать файл в моей домашней директории с именем .bash_login и запустить tmux из этого файла: `echo" tmux "> ~ / .bash_login.
Это должно сработать, но вы должны попытаться найти сами, потому что документация bash не очень точна о том, какой файл читается и когда выполняется.
источник
chsh
делает! За исключением того, что ваш путь требует наличия прав root и подвержен ошибкам. Запускtmux
от.bash_login
это более вероятно , сломать удаленные входы.