как включить имя сеанса экрана в hardstatus?


17

Я использую разные сеансы экрана для разных проектов. Стартовый экран вроде screen -S project1. Теперь я хотел бы упомянуть 'project1' в строке hardstatus.

Имя сеанса может быть получена из переменной окружения STY: STY=13539.project1.
Но как вывести это на экран? Я пробовал команду backtick и% `в hardstatus, но я не могу понять, что это правильно.

Что я сделал:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

не повезло, пустой% `.

backtick 0 30 30 sessionname

все еще не повезло, имя сеанса: не найдено

Ответы:


18

Вы можете включить эту строку (с дополнительной информацией, если хотите) в ваш $PS1:

\[\e]0;$STY\007

внутри одинарных кавычек, чтобы задержать оценку переменной. Затем добавьте это в свой ~/.screenrc:

hardstatus string '%H:%h'

К сожалению, screenне устанавливается $STYв среде команд, которые он порождает для backtickфункции.

Другой вариант, вместо указанного выше:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

Преимущество этого состоит в том, что оно следует за изменениями, сделанными с помощью sessionnameкоманды. Первый вариант - нет.

Редактировать:

От сюда :

Так как $ STY еще не установлен, когда источники экрана .screenrc, вы можете использовать этот трюк в вашем .screenrc:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Т.е. отправить экранную команду первому окну.


1
Для решения, которое начинается с backtick: (1.) является backtickвстроенным в Bash? команда GNU-экран? двоичный исполняемый файл? есть страница руководства? (2.) Я знаю, что это работает, потому что я пытался это сделать, но как получить двухстрочную команду для выполнения, когда кажется, что .screenrcсинтаксис gnu-screen требует одной строки для hardstatusкоманды? (3.) Как бы я изменил вашу команду, чтобы добавить текст после имени сеанса?
Тревор Бойд Смит

@TrevorBoydSmith: backtickэто screenкоманда. Ищите его в справочной странице для screen. Возможно, было бы лучше, если бы вы опубликовали новый вопрос относительно остальной части того, что вы спрашиваете. Я не думаю, что вывод hardstatus может занимать две строки на экране. Вы можете использовать sedили awkвместо того, grepчтобы делать то, что grepделает в моем примере, а также добавить дополнительный текст.
Приостановлено до дальнейшего уведомления.

Когда я сказал «две строки», позвольте мне повторить то, что я имел в виду, я не хочу двухстрочный дисплей для hardstatus. Я был сбит с толку %` и в backtickбытии на отдельные линии ... они не выглядели родственными , но теперь, когда я прочитал в документацииbacktick я вижу , что два связаны / необходимые / действительный-синтаксис (хотя и довольно странный синтаксис ИМО).
Тревор Бойд Смит

3

Для меня это легко работает со вставкой %Sв hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Однако при этом отображается имя сеанса без идентификатора (например ${STY#*.}); в вашем примере: project1.

(Тот же ответ на другие вопросы здесь и здесь для полноты).


2
К вашему сведению, "% S" работает на более новых версиях gnu-screen (работает для меня в версии Fedora 21), но не на более старых версиях (не работает для меня в версии CentOS 6).
Тревор Бойд Смит
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.