як включити ім'я сеансу екрана в 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це вбудований баш? команда gnu-screen? двійковий виконуваний файл? чи є сторінка чоловіка? (2.) Я знаю, що це працює, тому що я спробував це, але як ви отримуєте команду з двох рядків для виконання, коли здається, що .screenrcсинтаксису gnu-screen потрібен один рядок для hardstatusкоманди? (3.) як я можу змінити вашу команду, щоб дозволити додавання тексту після назви сесії?
Тревор Бойд Сміт

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

Коли я сказав "дворядковий", дозвольте мені перечитати те, що я мав на увазі, я не хочу відображення двох рядків для жорсткого стану. Мене збентежило %` і backtickіснування в окремих рядках ... вони не виглядали пов'язаними, але тепер, коли я читаю документацію,backtick я бачу, що ці два синтаксиси пов'язані / необхідні / дійсні (хоча і досить дивний синтаксис IMO).
Тревор Бойд Сміт

3

Для мене це легко %Sсправляється із вставкою у жорсткий стан.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

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

( Для повноти однакова відповідь на інші запитання тут і тут ).


2
FYI, "% S" працює над новішими версіями гну-екрану (для мене працює версія Fedora 21), але не більш старими версіями (не працює для мене на версії CentOS 6).
Тревор Бойд Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.