Как включить имя сеанса экрана в 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
,