Безопасно запускайте tmux при входе в систему

Я хотел бы выполнить tmux при входе в оболочку для моего пользователя. Я использую fish, но думаю, что этот вопрос актуален для любой оболочки. До сих пор я добился этого, следуя совету в этом вопросе: https://askubuntu.com/questions/560253/automatically-running-tmux-in-fish, в частности, добавив следующую строку в мой config.fish:

test $TERM != "screen"; and exec tmux

Однако у меня есть одна серьезная проблема с этим подходом, и это если tmux не запускается, возможно, если я внес синтаксическую ошибку в свой файл .tmux.conf, процесс оболочки немедленно завершается, загружая меня из сеанса.

Есть ли способ автоматически запускать tmux в новых исполнениях оболочки, с помощью которого я могу:

  • Обнаружение ошибок и откат при «простом» выполнении оболочки (т. е. просто fish без tmux)
  • Не нужно дважды выходить из логина — один раз, чтобы выйти из tmux, а затем еще раз, чтобы выйти из fish.

?


person Troy Kinsella    schedule 14.03.2016    source источник


Ответы (2)


Это работает для меня:

if status --is-login
    source $HOME/.config/fish/login.fish
    tmux; and exec true
end

Очевидно, что у вас может быть или не быть файла login.fish. Мне нравится, чтобы мой config.fish был компактным, помещая код, который может не понадобиться для текущего сеанса, в отдельные файлы, поэтому у меня также есть интерактивный скрипт.fish

person Kurtis Rader    schedule 14.03.2016
comment
tmux; and exec true кажется, это то, что я искал. Спасибо! Еще один виртуальный +1 (новички в stackoverflow не могут) за совет по отдельным файлам рыбы. - person Troy Kinsella; 14.03.2016
comment
актуальная проблема fish относительно exec true и exit: github.com/fish-shell/fish -shell/проблемы/991 - person Braham Snyder; 03.11.2017

Я предполагаю, что tmux завершает работу с ненулевым (т.е. сбойным) статусом, если есть ошибки конфигурации, поэтому вы, вероятно, можете отказаться от exec и выйти вручную, например

if test $TERM != "screen"
    tmux
    and exit
end

Однако имейте в виду, что fish всегда является источником всех своих файлов конфигурации, так что вам нужно поместить это в if status --is-login или что-то подобное.

person faho    schedule 14.03.2016
comment
Я бы добавил +1, если бы мне разрешили, будучи новичком в stackoverflow и всем остальным, из-за отличного совета if status --is-login, но это решение по-прежнему заставляет меня дважды выходить из оболочки. Я не уверен, почему. - person Troy Kinsella; 14.03.2016
comment
Похоже, что tmux, являясь клиент-серверной программой, немедленно завершает работу со статусом 1, несмотря на то, что сеанс tmux продолжается. - person Troy Kinsella; 14.03.2016
comment
Нет, я просто забыл еще один кусочек рыбы: если выход вызывается при поиске файла (с использованием встроенного исходного кода), остальная часть файла будет пропущена, но сама оболочка не выйдет. (из документов - person faho; 14.03.2016