come includere il nome della sessione dello schermo in hardstatus?


17

Uso diverse sessioni dello schermo per diversi progetti. Schermata iniziale come screen -S project1. Ora, vorrei menzionare 'project1' nella linea hardstatus.

Nome della sessione può essere ottenuto da variabile d'ambiente STY: STY=13539.project1.
Ma come ottenere questo sullo schermo? Ho provato il comando backtick e% `in hardstatus, ma non riesco a farlo bene.

Cosa ho fatto:

Screenrc:

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

senza fortuna, svuota% `.

backtick 0 30 30 sessionname

ancora niente fortuna, nome sessione: Non trovato

Risposte:


18

Puoi includere questa stringa (con ulteriori informazioni, se lo desideri) nel tuo $PS1:

\[\e]0;$STY\007

all'interno di virgolette singole per ritardare la valutazione della variabile. Quindi aggiungi questo al tuo ~/.screenrc:

hardstatus string '%H:%h'

Sfortunatamente, screennon è impostato $STYnell'ambiente dei comandi che genera per la backtickfunzione.

Un'altra opzione, invece di quella sopra:

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

Il vantaggio di questo è che segue le modifiche apportate usando il sessionnamecomando. La prima opzione no.

Modificare:

Da qui :

Dal momento che $ STY non è ancora impostato quando le origini dello schermo .screenrc, puoi usare questo trucco nel tuo .screenrc:

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

Vale a dire inviare un comando su schermo alla prima finestra.


1
Per la soluzione che inizia con backtick: (1.) è backtickincorporato un bash? un comando gnu-screen? un eseguibile binario? c'è una pagina man? (2.) So che funziona perché l'ho provato, ma come si ottiene un comando a due righe da eseguire quando sembra che la .screenrcsintassi gnu-screen richieda una riga per il hardstatuscomando? (3.) come potrei modificare il comando per consentire di aggiungere del testo dopo il nome della sessione?
Trevor Boyd Smith,

@TrevorBoydSmith: backtickè un screencomando. Cerca nella pagina man di screen. Potrebbe essere meglio se pubblichi una nuova domanda riguardante il resto di ciò che stai chiedendo. Non credo che l'output di hardstatus possa occupare due righe sullo schermo. Puoi usare sedo awkinvece di grepfare ciò che grepsta facendo nel mio esempio e anche aggiungere del testo aggiuntivo.
In pausa fino a nuovo avviso.

Quando ho detto "due righe" mi permetto di riaffermare ciò che intendevo dire, non voglio un display a due righe per hardstatus. Ero confuso dall'essere %` e backtickdall'essere su linee separate ... non sembravano collegati ma ora che ho letto la documentazionebacktick vedo che i due sono correlati / necessari / sintassi validi (anche se piuttosto strana sintassi IMO).
Trevor Boyd Smith,

3

Per me questo funziona facilmente con l'inserimento %Snell'hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Tuttavia, questo visualizza il nome della sessione senza l'ID (come ${STY#*.}); nel tuo esempio: project1.

(Stessa risposta ad altre domande qui e qui per completezza).


2
Cordiali saluti, "% S" funziona su versioni più recenti di gnu-screen (funziona su Fedora 21 per me) ma non su versioni precedenti (non funziona su CentOS 6 per me).
Trevor Boyd Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.