Уничтожьте tmux сессию и выберите другую tmux сессию

Когда необходимо изменить полномочия файлов все время, Вы цените эти 3 символа. Много времени я использую + или - версии для изменения полномочий.

Например, я создаю новый PHP, Python или другой сценарий в моей апачской папке. chmod a+x все, что я делаю так, это может быть выполнено. Я считал его как, "все плюс выполняются". Теперь я знаю, что это собирается работать, и мне только были нужны 3 символа.

Другие времена я использую 644 и 755 автоматически. Я просто думаю о нем как 644 означает файл, 755 означает сценарий.

11
15.12.2012, 21:00
5 ответов

Я думаю, что это близко к тому, что Вы хотите:

bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"\$(tmux display-message -p \"#S\")\"'"

Ваш подход № 3 приезжает правильные строки, но проблема - это confirm-before не делает status-left- замены стиля (например. #S) в его командной строке.

Протест для вышеупомянутой привязки - это, так как от всего выполняют run-shell, команды выполняются вне контекста какого-то конкретного клиента или сессии. Это действительно только работает потому что клиент “по умолчанию” (для switch-client) и сессия “по умолчанию” (для #S в display-message -p) последний раз активные. Это удается, как Вы ожидали бы, пока у Вас только есть единственный активный клиент (например, отдельный пользователь, который не вводит в другой tmux клиент, пока команды оболочки не закончили работать); это могло перестать работать существенно если (например). Вы инициировали привязку в tmux клиенте A, но новый вход получен tmux клиентом B перед оболочкой, запущенной run-shell имел шанс выполнить его команды.

Это конкретное состояние состязания походит на хорошую мотивацию для того, чтобы предоставить клиентскую/сессию/окно/область информацию run-shell команды. Существует запись TODO о получении if-shell и run-shell поддерживать (дополнительный?) status_replace() (т.е. status-left- замены стиля), хотя, возможно, лучший выбор был бы format_expand(), который является своего рода более новым надмножеством status_replace (предложения #{client_tty}, и т.д.).

12
27.01.2020, 19:58
  • 1
    за $2/г Это, кажется, делает точно, что я искал. Я попробовал похожий метод после нахождения tmux display-message -p "#S" прием в другом ответе. На обертывание кажется, что все в оболочке выполнения было ключом.Спасибо! –  Trey Hunner 16.12.2012, 11:57
  • 2
    Как дела это без confirm-before? Я испытываю затруднения при разбирании в выходе. –  Miles 16.07.2015, 11:11
  • 3
    @Miles: Попробуйте этого: bind-key X run-shell 'tmux switch-client -n \; kill-session -t "#S"' (tmux 1.8 + run-shell расширяется #S непосредственно, таким образом, мы добираемся для исключения display-message и его дополнительное заключение в кавычки) –  Chris Johnsen 16.07.2015, 22:01

На всякий случай, если кто-то наткнется на этот вопрос - tmux-sessionist предоставляет эту функцию вместе со многими другими.

1
27.01.2020, 19:58

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

Если вам нужно стандартное поведение choose-session с дополнительной функцией, которая прерывает исходный сеанс, если к нему не остаются подключенные другие клиенты, то этот вопрос также может представлять интерес.

0
27.01.2020, 19:58

Расширение от Криса Джонсена ответа (в комментариях )выше, о том, как это сделать без подсказки илиconfirm-before:

bind-key X run-shell 'tmux switch-client -n \; kill-session -t "#S"'

Если остался только 1 сеанс (сеанс, в котором вы сейчас находитесь )и вы запустите команду, вы получите сообщение об ошибке, и сеанс не будет уничтожен. Обычно (, если вы похожи на меня ), вы хотите, чтобы команда продолжала завершать сеанс, даже если нет другого сеанса, на который он мог бы переключиться. Вот что у меня получилось:

bind-key X if-shell '[ $(tmux list-sessions | wc -l) -ne 1 ]' \
                    "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'" \
                    "run-shell 'tmux kill-session -t \"#S\"'"
0
17.03.2020, 15:23

(субъективно )более надежная и удобочитаемая версия ответа от Криса, которую я придумал:

bind-key X \
    if-shell '[ "$(tmux display -p "#{session_many_attached}")" -gt 0 ]' {
        # the session is attached to multiple clients, so we can just switch the client to a different session.
        choose-session
    } {
        # we are the last client attached to this session; kill it.
        # we need to use `run-shell` to ensure that the current session number is expanded *before* we switch to the new session.
        confirm -p 'Kill #S (y/n)?' {
            choose-tree -s {
                run-shell 'tmux switch-client -t "%%" \; kill-session -t "#S"'
            }
        }
    }
0
24.08.2021, 22:09

Теги

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