Как я могу заменить текущий сеанс в tmux, выбрав другой и прервав текущий?

Если вы абсолютно уверены, что PV не используется, то просто делайте то, что он вам говорит

pvcreate -ff /dev/sd...
4
13.04.2017, 15:37
1 ответ

Это связывает PREFIX Cs для выбора сеанса, переключатель к нему, а затем завершите предыдущий сеанс:

bind-key C-s \
  if-shell "(($(tmux display -p '#{session_many_attached}') > 0))" \
    choose-session \
    "run-shell \"tmux choose-session \\\"switch-client -t '%%'; kill-session -t '$(tmux display -p '#S')'\\\"\""

Я использовал выражения оболочки ( другой ответ, в котором оболочка не использовалась, было бы замечательно! ). Сначала я использую Tmux if-shell , чтобы решить, есть ли му ltiple подключенных клиентов. Если есть, то я просто вызываю стандартную команду choose-session .

Однако, если это единственный клиент, подключенный к сеансу, я передаю специальную команду choose-session , но я делаю это в оболочке (с run-shell ), поэтому что я могу создать командную строку, переданную в select-session .

Эта командная строка состоит из двух команд:

  • switch-client -t '%%' , которую select-session использует по умолчанию (см. man tmux для объяснения).
  • kill-session -t '$ (tmux display -p' #S ')' сначала использует подоболочку для получения имени текущего сеанса (он еще не был уничтожен ) и передает его в качестве параметра kill-session .

Последняя команда требует много экранирования, чтобы заставить ее работать. if-shell принимает три аргумента: команду оболочки и две команды tmux. Их необходимо заключить в кавычки, если они содержат пробелы. Следовательно, третий аргумент run-shell ... довольно неприятен!

(tmux 2.3)

5
27.01.2020, 20:53

Теги

Похожие вопросы