LINUX.ORG.RU

Как задавать в скриптах имя вкладки screen?

 , , ,


2

3

В screen (и tmux) название каждой вкладки '0 bash', '1 bash' ... и тд.

Что прописывать (echo ...?) в скрипте, чтоб там было не 'bash', а то что я хочу?

Перемещено hobbit из general

★★★★★

Последнее исправление: teod0r (всего исправлений: 2)
Ответ на: комментарий от YAR

благодарю. но мне надо иметь возможность менять этот title на ходу, во время работающей программы, из скрипта. например 'z 2/25', 'pk u 58/367'.

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

rain@walkbook:~$ screen -ls
There is a screen on:
2854.walkbook_mainscreen (23.06.2026 15:35:38) (Attached)
1 Socket in /run/screen/S-rain.
rain@walkbook:~$ screen -p 1 -x 2854.walkbook_mainscreen -X title «234»
rain@walkbook:~$

YAR ★★★★★
()
Ответ на: комментарий от YAR

мы наверно не поняли друг друга. мне не жужно запускать screen из скрипта или ещё как-то. есть уже запущенный screen, мне нужно прописать в скрипте команду, которая поменяет название вкладки screen'а, в которой запущен этот скрипт.

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Не тупи. Надо знать название сессии screen. Потом команду -X title можно вызвать что изнутри скрина, что снаружи, это не имеет значения. Если сидеть внутри то текущую сессию видно по переменной окружения $STY .

anonymous
()

В tmux имя вкладки задаётся через window-status-format (для активной) и window-status-current-format (для не-активных). Если ты хочешь чтобы там выводилось что-то касательно запущеной программы, то нужно там прописать скрипт, который будет делать то, что тебе нужно по PID запущеного процесса в этой складке; PID можно передать в в параметрах скрипта через #{pane_pid}. Готовься: скрипт будет непростой, так как в общем случае процессы формируют дерево, то есть запущеный процесс может породить еще подпроцессы.

Вот тебе для теста (для неактивной вкладки):

set-window-option -g window-status-format '#( echo "My Title" )'

Вот кусок моего конфига:

set-window-option -g window-status-format        '#{?#{==:#{window_panes},1},,+}#{window_index}:#( /bin/bash -c "/usr/bin/getwindowtitle.sh #{pane_pid}" )'

set-window-option -g window-status-current-format '#{?#{==:#{window_panes},1},,+}#{window_index}:#( /bin/bash -c "/usr/bin/getwindowtitle.sh #{pane_pid}" )*'
Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от teod0r

Собственно, выше уже все расписали, в итоге если резюмировать максимально короткий вариант, то выходит

screen -S $STY -X title "New title"


$ cat settitle.sh 
#!/bin/bash
while sleep 1;
do
[ ! -z $STY ] && screen -S $STY -X title "$(date +%X)"
done

YAR ★★★★★
()
Последнее исправление: YAR (всего исправлений: 2)
Ответ на: комментарий от router

PROMPT_COMMAND

врядли. ЕМНИП несколько лет назад mky писал мне уже ответ, что мой вопрос решается с помощью echo ... что-то там. не нашёл по поиску.

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Запусти tty в области где нужно заменить заголовок, получи путь до pty, и пришли туда \e]0;${то_что_ты_хочешь}\a, и вуаля − заголовок поменяется на новый (он может быть перезаписан чем-либо ещё)

tnray
()
Ответ на: комментарий от tnray

Впрочем название вкладки ≠ заголовок области, чтобы в tmux видеть заголовок, нужно вписать set -g pane-border-status top в ~/.tmux.conf

tnray
()
Последнее исправление: tnray (всего исправлений: 1)
Ответ на: комментарий от tnray

и вуаля

не работает.
printf '\e]0;%s\a' «pk u 58/367» просто в консоли без перенаправления вообще не выводит ничего.

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 2)
Ответ на: комментарий от teod0r

что должно быть в ${TTY} ?
пробовал /dev/tty, /dev/tty0, /dev/tty1, /dev/console, /dev/pts/X, /dev/pts/ptmx - не меняет.

Эта переменная должна быть назначена автоматически, поэтому её не надо вручную заменять, оставляешь как есть. Если нет, то это работать не будет.

Заменять нужно только то, что "pk u 58/367".

mord0d ★★★★★
()
Ответ на: комментарий от teod0r

printf ‘\e]0;%s\a’ «pk u 58/367» просто в консоли без перенаправления вообще не выводит ничего.

Оно и не должно ничего выводить, оно лишь меняет заголовок окна.

mord0d ★★★★★
()
Ответ на: комментарий от tnray

Там скорее $(tty), чем ${TTY}

Ну или так, если шелл не назначает переменную $TTY автоматически (что логично при вызове из скрипта).

mord0d ★★★★★
()
Ответ на: комментарий от teod0r

Я тоже не нашёл и не помню, чтобы я про подобное писал.

Не совсем понял вопрос, вроде, вкладок в терминологии screen/tmux нет, там окна. Возможно, вам нужно:

printf '\033kWINDOW_NAME\033\'
Но, всё кроется в деталях. У tmux нужно включать tmux set-option allow-rename on, и эту команду можно делать прямо из скрипта, перед вызовом этой esc-последовательности.

А со screen сложнее. У нового screen (от 4.5) в конфиге две опции — defdynamictitle и dynamictitle, у старого, они, вроде как, всегда включены. И из-за них, вроде как, screen меняет название окна после выполнения команды. Если вы в консоли сделаете этот printf, то ничего не изменится, так как команда сразу завершится. Вы попробуйте сделать:

printf '\033kWINDOW_NAME\033\'; sleep 300
и пока sleep не завершился посмотрите, поменялось имя окна или нет, и то что вам нужно или нет.

mky ★★★★★
()
Ответ на: комментарий от mky

printf ’\033kWINDOW_NAME\033'; sleep 300

Наверное всё же как-то так:

echo -e '\e]0;My Title\a'

или так

echo -ne "\033]0;My Title\007"

потому что \033k ничего не делает.

Проблема в этом способе в том, что после выхода из программы, имя окна остаётся, и указывает на программу, которая больше уже не запущена. А прочитать предыдущее значение (по принципу OLD_IFS) не представляется возможным.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

В моём man screen есть раздел «TITLES (naming windows)», там:

The default name for all shell windows can be set with the shelltitle command in the .screenrc file, while all other windows are created with a screen command and thus can have their name set with the -t option. Interactively, there is the title-string escape-sequence (<esc>kname<esc>\) and the title command (C-a A)...

что после выхода из программы, имя окна остаётся

Ну, для screen есть опция dynamictitle, а для остального переменная среды PROMPT_COMMAND. Хотя для TC, может это и не проблема, может ему как раз не удобно, если после имя окна стане «bash» и ищи потом в каком окне запускал скрипт

mky ★★★★★
()

В screen имя вкладки задаётся параметром -t при создании окна или командой -X после. Например:

screen -S sess -X screen -t "myname" bash   # создаёт окно с именем myname

или, если окно уже есть:

screen -S sess -X title "myname"

В tmux аналогично – при создании окна можно указать имя через -n, а позже переименовать командой rename-window:

tmux new-window -n "myname" bash
# или
tmux rename-window "myname"

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

kirov_reporting
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария