Вопрос или проблема
Я ищу способ получить текущее название окна в GNU screen.
У меня есть скрипт, который использует screen -X title что-то
, чтобы изменить название окна во время выполнения, и я хотел бы вернуть его к предыдущему значению в конце скрипта.
“screen -X” прикрепляет команду к указанной сессии экрана, он не влияет на название окна. Либо ваш скрипт использует последовательность escape для установки названия окна экрана, либо это делает ваш screenrc. Обратите внимание, что окна screen не связаны с окнами терминала (xterm и т.д.).
Вы можете ознакомиться с двумя записями в моем блоге, касающимися использования уловок zsh для того, чтобы это сработало,
Я использую комбинацию факторов для этого, в первую очередь предисполняемый хук (preexec()) в моей оболочке, который так же легко может работать с другой оболочкой.
http://blog.psych0tik.net/?p=841
Я полагаю, что код в записи может быть устаревшим, соответствующие файлы всегда можно найти здесь:
http://natalya.psych0tik.net/~richo/screenrc
http://natalya.psych0tik.net/~richo/zshrc
http://natalya.psych0tik.net/~richo/profile
Если вы пользователь vim, вам почти наверняка стоит установить set titleold
на что-то значимое, чтобы избежать перезаписи вашего названия при выходе.
Похоже, я немного опоздал на праздник =) В любом случае, для тех, кто столкнется с такой же потребностью: используйте screen -Q title
, чтобы получить название текущего экрана, и screen -X title "<строка>"
, чтобы установить его.
Вот небольшая часть кода из моего скрипта:
# screen: сохранить и восстановить название окна при выходе
if [[ -n "$STY" ]]; then
__SCREEN_GET_TITLE=$(screen -Q title)
trap "screen -X title \"$__SCREEN_GET_TITLE\"; unset __SCREEN_GET_TITLE" EXIT INT
fi
.
Ответ или решение
Для получения заголовка текущего окна в GNU Screen существует несколько способов, которые могут быть полезны в различных сценариях использования. В этой статье мы детально рассмотрим, как можно извлечь заголовок окна, изменять его и восстанавливать предыдущие значения при выполнении скриптов.
Основные команды
-
Получение заголовка окна:
Для того чтобы получить заголовок текущего окна в GNU Screen, можно использовать следующую команду:screen -Q title
Эта команда возвращает заголовок текущего окна, что позволяет вам сохранить его для последующего использования.
-
Установка заголовка окна:
Для изменения заголовка окна вы можете использовать команду:screen -X title "<строка>"
Здесь вместо
<строка>
вы можете указать нужный вам заголовок.
Пример: Сохранение и восстановление заголовка
Если вы хотите автоматически сохранять заголовок окна перед его изменением и восстанавливать это значение по завершении скрипта, можно использовать следующую конструкцию в вашем сценарии:
# screen: сохранить и восстановить заголовок окна при выходе
if [[ -n "$STY" ]]; then
__SCREEN_GET_TITLE=$(screen -Q title)
trap "screen -X title \"$__SCREEN_GET_TITLE\"; unset __SCREEN_GET_TITLE" EXIT INT
fi
В этом коде:
- Проверяется, запущен ли текущий процесс в GNU Screen, с помощью переменной окружения
STY
. - Сохраняется текущий заголовок окна в переменной
__SCREEN_GET_TITLE
. - Устанавливается обработчик сигнала
trap
, который выполнит команду для восстановления заголовка окна при выходе из скрипта или при прерывании.
Дополнительные рекомендации
- Убедитесь, что конфигурация вашего
.screenrc
файла корректно настроена. В некоторых случаях настройки внутри этого файла могут влиять на поведение заголовка. - Если вы используете редактор Vim, рекомендуется установить параметр
set titleold
, что поможет защитить ваш заголовок от перезаписи при выходе из Vim.
Заключение
Использование команд screen -Q title
и screen -X title "<строка>"
дает возможность гибко управлять заголовками окон в GNU Screen. С помощью приведенного кода вы сможете сохранять и восстанавливать предыдущие заголовки, что значительно упростит работу с вашими скриптами и сделает их более предсказуемыми. Надеемся, что эта информация окажется для вас полезной, и вы сможете эффективно использовать возможности GNU Screen в ваших проектах.