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

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

2 ответа2

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"' 

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

3

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

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .