jak dołączyć nazwę sesji screena do hardstatus?

17

Używam różnych sesji ekranowych do różnych projektów. Ekran początkowy jak screen -S project1. Teraz chciałbym wspomnieć o „projekcie 1” w linii hardstatus.

Nazwa sesji można uzyskać od zmiennej STY środowiska: STY=13539.project1.
Ale jak to zrobić na ekranie? Próbowałem wykonać komendę backtick i% `na hardstatus, ale wydaje mi się, że nie potrafię tego zrobić poprawnie.

Co ja zrobiłem:

.screenrc:

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

nie ma szczęścia, pusty% `.

backtick 0 30 30 sessionname

wciąż nie ma szczęścia, nazwa sesji: Nie znaleziono

fungusakafungus
źródło

Odpowiedzi:

18

Możesz dołączyć ten ciąg (w razie potrzeby z dodatkowymi informacjami) do $PS1:

\[\e]0;$STY\007

wewnątrz pojedynczych cudzysłowów w celu opóźnienia oceny zmiennej. Następnie dodaj to do ~/.screenrc:

hardstatus string '%H:%h'

Niestety, screennie ustawia się $STYw środowisku poleceń spawnowanych dla tej backtickfunkcji.

Inna opcja, zamiast powyższej:

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

Zaletą tego jest to, że śledzi zmiany dokonane za pomocą sessionnamepolecenia. Pierwsza opcja nie.

Edytować:

Od tutaj :

Ponieważ $ STY nie jest jeszcze ustawione, gdy źródła ekranu .screenrc, możesz użyć tej sztuczki w swoim .screenrc:

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

Tj. Wyślij polecenie ekranowe do pierwszego okna.

Wstrzymano do odwołania.
źródło
1
W przypadku rozwiązania rozpoczynającego się od backtick: (1.) jest backtickwbudowane bash? polecenie gnu-screen? binarny plik wykonywalny? czy jest strona man? (2.) Wiem, że to działa, ponieważ próbowałem, ale jak uzyskać dwuliniowe polecenie do wykonania, gdy wydaje się, że .screenrcskładnia gnu-screen wymaga jednego wiersza dla hardstatuspolecenia? (3.) Jak zmodyfikowałbym twoje polecenie, aby umożliwić dołączanie tekstu po nazwie sesji?
Trevor Boyd Smith
@TrevorBoydSmith: backtickto screenpolecenie. Wyszukaj go na stronie podręcznika użytkownika dla screen. Najlepszym rozwiązaniem może być opublikowanie nowego pytania dotyczącego reszty zadawanych pytań. Nie sądzę, aby dane wyjściowe typu hardstatus mogły zajmować dwie linie na ekranie. Możesz użyć sedlub awkzamiast greprobić to, co grepdzieje się w moim przykładzie, a także dołączyć dodatkowy tekst.
Wstrzymano do odwołania.
Kiedy powiedziałem „dwuliniowy”, pozwól mi powtórzyć, co miałem na myśli, nie chcę wyświetlania dwuwierszowego dla stanu twardego. Byłem zdezorientowany przez %` i backtickistnienie na osobnych liniach ... nie wyglądały na powiązane, ale teraz, gdy czytam dokumentacjębacktick , widzę, że te dwa są powiązane / konieczne / ważne-składnia (aczkolwiek dość dziwna składnia IMO).
Trevor Boyd Smith
3

Dla mnie to łatwo działa z wstawieniem %Sw hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Jednak wyświetla nazwę sesji bez identyfikatora (jak ${STY#*.}); w np project1.

(Ta sama odpowiedź na inne pytania tutaj i tutaj dla kompletności).

Scz
źródło
2
Do Twojej wiadomości, „% S” działa na nowszych wersjach gnu-screen (działa na mnie w wersji Fedora 21), ale nie na starszych wersjach (nie działa na mnie w wersji CentOS 6).
Trevor Boyd Smith,