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

Я использую разные сеансы экрана для разных проектов. Стартовый экран как 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

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

2 ответа

Решение

Вы можете включить эту строку (с дополнительной информацией, если хотите) в свой $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"' 

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

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

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

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

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

Другие вопросы по тегам