Я пишу сценарий. Я действительно хочу это знать. Я надеюсь, что исполняемый файл tmux скажет мне это.
я нахожу
tmux rename <newname>
Можно переименовать текущую сессию. Но я не могу найти команду, чтобы получить свое собственное имя.
Я пишу сценарий. Я действительно хочу это знать. Я надеюсь, что исполняемый файл tmux скажет мне это.
я нахожу
tmux rename <newname>
Можно переименовать текущую сессию. Но я не могу найти команду, чтобы получить свое собственное имя.
В tmux 1.2 (и более поздних версиях) вы можете использовать опцию -p
display-message
для вывода сообщения на стандартный вывод (вместо отображения его на подключенном клиенте):
tmux display-message -p '#S'
#S
отформатирован как имя сеанса (см. Описание опции status-left
на странице руководства).
Я удивлен, что спустя почти 5 лет никто не указал, что ни один из этих ответов не является адекватным. Хотя оба работают нормально, если текущий TTY подключен к единственному сеансу tmux на хосте, оба эти ответа не срабатывают, если:
В первом случае оба ответа здесь сообщают имя присоединенного сеанса (независимо от того, управляется ли текущий tty этим сеансом). В последнем случае результат может быть неопределенным или приведет к множественным ответам.
Правильный вопрос должен звучать так: «Как называется сеанс tmux, к которому присоединен мой текущий сеанс терминала?"
Чтобы он ответил на этот вопрос, выполните:
for s in $(tmux list-sessions -F '#{session_name}'); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'
Это работает независимо от количества сеансов tmux (подключенных или иных) и независимо от того, является ли текущий сеанс терминала частью сеанса tmux или нет.
Расширенный / исправленный ответ tim -oples согласно комментарию don_crissti о Почему этот grep -v
не функционирует, как ожидалось? ,
Команда "$(tty)" в ответе tim -oples
| grep "$(tty)" |
не будет работать в этом контексте, как ожидалось. Он оценивается как строка «не tty».
Замена на переменную решает эту проблему.
TTY = $(терминал)
...
| grep "$ tty" |
Кроме того, когда нет сеансов tmux, оригинальный код будет производить
Сообщение об ошибке «сервер не работает в /tmp /tmux-1000 /default» .
Добавьте 2>/dev/null
и код запустится без вывода сообщения об ошибке.
Модифицированный код читается как:
tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'
Не идеально, но вы можете извлечь имя прикрепленного сеанса с помощью awk
:
tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'
Пользовательский формат немного легче разобрать, чем стандартный.
tty
Вместо этого я обнаружил, что это работает точно для меня:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi