Как да изляза от tmux, без да напускам терминала си

Използвам tmux на bash и го оставям да стартира автоматично от .bashrc. Понякога искам да го деактивирам и трябва да редактирам моя .bashrc, за да го направя. Редактирането на файл всеки път, когато деактивирам tmux, е доста обезпокоително и мисля, че най-лесният начин да направя същото е да излезете от tmux, без да напускате терминала. Мога ли да го направя?

Когато напиша exit, bash и терминалът се затварят. Опитах exec bash, но току-що рестартира bash вътре в tmux.

Стартирам tmux от кода по-долу, според https://wiki.archlinux.org/index.php/tmux#Bash.

if [[ $DISPLAY ]]; then
        # If not running interactively, do not do anything
        [[ $- != *i* ]] && return
        [[ -z "$TMUX" ]] && exec tmux
fi

Ако просто стартирам tmux в кода по-горе вместо exec tmux, мога да постигна целта си. Но това не ми харесва, защото не разбирам защо кодът използва exec tmux вместо tmux и не искам да го променя прибързано, а когато стартирам tmux, трябва да напиша exit или C-d два пъти, за да изляза от терминала.


person A01    schedule 31.08.2019    source източник
comment
Напълно безопасно е просто да премахнете exec; използването му кара tmux да замени източника на обвивката .bashrc и това е точно това, което не искате да правите.   -  person chepner    schedule 04.09.2019
comment
@chepner Благодаря, ще премахна exec и това решава проблема ми.   -  person A01    schedule 04.09.2019


Отговори (1)


(Забележка: този въпрос наистина трябва да е на unix.stackexchange.com). Едно просто решение е да смените линията

[[ -z "$TMUX" ]] && exec tmux

с

[[ -z "$TMUX" ]] && { tmux; [ ! -f ~/dontdie ] && exit || rm ~/dontdie; }

Това изпълнява tmux както преди, но когато излезе, тества за съществуването на файл, ~/dontdie. Ако файлът не съществува, && exit е готово и терминалът се затваря както преди. Ако обаче създадете файла, преди да излезете от tmux, тогава ще направите частта || rm ..., която премахва файла и продължава през останалата част от файла .bashrc, оставяйки ви в bash shell.

И така, за да останете в терминала, от прозореца tmux въвеждате командите:

touch ~/dontdie; exit

вместо само exit и ще излезете от tmux и ще продължите в bash. За да улесните, можете да добавите обвързване в ~/.tmux.conf към ключ, като например X:

bind-key X send-keys 'touch ~/dontdie; exit' Enter

След това просто въвеждате префикса си, Control-B по подразбиране, след това X, за да създадете файла и да излезете от tmux.

person meuh    schedule 01.09.2019
comment
С изключение на използването на tmux, това работи перфектно. Всъщност какви са предимствата и недостатъците на exec tmux и tmux? - person A01; 01.09.2019
comment
Когато exec tmux замествате процеса на обвивката с tmux. Когато tmux излезе, не можете да се върнете към обвивката и трябва да се върнете към това, което стартира обвивката, ако тя все още работи. Не продължавате с редовете в .bashrc, които следват exec. Без exec, когато tmux излезе, вие продължавате с тези редове и когато обвивката стигне до края на файла .bashrc, тя продължава във вашия терминал. - person meuh; 01.09.2019
comment
Има ли някакъв недостатък от използването на tmux вместо exec tmux и обратното? Чувствам се неудобно да използвам tmux, защото не разбирам защо препратката използва exec tmux. Няма ли причина да изберете exec tmux вместо tmux? - person A01; 01.09.2019
comment
Ако ви помага да разберете, можете да замените exec tmux с tmux; exit, което има същия ефект. Стойността на използването на exec в този случай е, че обвивката не губи ресурси в очакване tmux да завърши, когато всичко, което ще направи, е да излезе от себе си. - person meuh; 01.09.2019