Когда необходимо изменить полномочия файлов все время, Вы цените эти 3 символа. Много времени я использую +
или -
версии для изменения полномочий.
Например, я создаю новый PHP, Python или другой сценарий в моей апачской папке. chmod a+x
все, что я делаю так, это может быть выполнено. Я считал его как, "все плюс выполняются". Теперь я знаю, что это собирается работать, и мне только были нужны 3 символа.
Другие времена я использую 644 и 755 автоматически. Я просто думаю о нем как 644
означает файл, 755
означает сценарий.
Я думаю, что это близко к тому, что Вы хотите:
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}
, и т.д.).
На всякий случай, если кто-то наткнется на этот вопрос - tmux-sessionist предоставляет эту функцию вместе со многими другими.
Есть другой вопрос , который задает аналогичный вопрос, но он немного отличается.
Если вам нужно стандартное поведение choose-session
с дополнительной функцией, которая прерывает исходный сеанс, если к нему не остаются подключенные другие клиенты, то этот вопрос также может представлять интерес.
Расширение от Криса Джонсена ответа (в комментариях )выше, о том, как это сделать без подсказки или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\"'"
(субъективно )более надежная и удобочитаемая версия ответа от Криса, которую я придумал:
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"'
}
}
}
tmux display-message -p "#S"
прием в другом ответе. На обертывание кажется, что все в оболочке выполнения было ключом.Спасибо! – Trey Hunner 16.12.2012, 11:57confirm-before
? Я испытываю затруднения при разбирании в выходе. – Miles 16.07.2015, 11:11bind-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