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:~$
мы наверно не поняли друг друга. мне не жужно запускать screen из скрипта или ещё как-то. есть уже запущенный screen, мне нужно прописать в скрипте команду, которая поменяет название вкладки screen'а, в которой запущен этот скрипт.
Не тупи. Надо знать название сессии screen.
Потом команду -X title можно вызвать что изнутри скрина, что снаружи, это не имеет значения.
Если сидеть внутри то текущую сессию видно по переменной окружения $STY .
В tmux имя вкладки задаётся через window-status-format (для активной) и window-status-current-format (для не-активных). Если ты хочешь чтобы там выводилось что-то касательно запущеной программы, то нужно там прописать скрипт, который будет делать то, что тебе нужно по PID запущеного процесса в этой складке; PID можно передать в в параметрах скрипта через #{pane_pid}. Готовься: скрипт будет непростой, так как в общем случае процессы формируют дерево, то есть запущеный процесс может породить еще подпроцессы.
Вот тебе для теста (для неактивной вкладки):
set-window-option -g window-status-format '#( echo "My Title" )'
Запусти tty в области где нужно заменить заголовок, получи путь до pty, и пришли туда \e]0;${то_что_ты_хочешь}\a, и вуаля − заголовок поменяется на новый (он может быть перезаписан чем-либо ещё)
Я тоже не нашёл и не помню, чтобы я про подобное писал.
Не совсем понял вопрос, вроде, вкладок в терминологии 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 не завершился посмотрите, поменялось имя окна или нет, и то что вам нужно или нет.
Проблема в этом способе в том, что после выхода из программы, имя окна остаётся, и указывает на программу, которая больше уже не запущена. А прочитать предыдущее значение (по принципу OLD_IFS) не представляется возможным.
В моём 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» и ищи потом в каком окне запускал скрипт