2012-12-20 20 views
8

Sto provando a scrivere un file .screenrc che posso utilizzare per impostare uno sviluppo su un particolare progetto - Avvierà alcune schermate, cd nei posti giusti, aprirà il file corretti in un editor e impostare alcune variabili d'ambiente necessarie per il test.Impostazione delle variabili di ambiente in .screenrc

non riesco a ottenere la configurazione dell'ambiente di lavorare .. Ho provato a mettere questo in `~/.screenrc:

setenv PATH ~/src/my_proj/bin/:$PATH 

Questo non funziona, e penso che il problema è che dopo screen set PATH, i normali script di inizializzazione della shell danno il via e lo cambiano su di me.

Non voglio disabilitare gli script di inizializzazione della shell normale. C'è un modo per rendere lo schermo setenv dopo la shell è inizializzata? O in alternativa, è possibile impostare una variabile su schermo in sola lettura?

risposta

1

Non è possibile che screen possa modificare le variabili di ambiente di un processo shell una volta avviato il processo, né esiste un modo per rendere una variabile di ambiente di sola lettura (i valori sono memorizzati nella memoria di ogni processo e ogni processo ha pieno accesso ad essi).

(Beh, ci potrebbe essere qualche modo specifico sistema brutto per farlo, ma è il tipo di cosa che i sistemi Unix-like sono progettati per impedirti di fare.)

Avrai bisogno di modificare il vostro lo script di inizializzazione della shell in modo che mantenga il valore esistente di $PATH, eventualmente aggiungendolo, anziché impostarlo su un nuovo valore che ignori il valore esistente.

Se si desidera eseguire questa operazione in modo condizionale, è possibile verificare l'esistenza di $STY, che viene impostato solo se la shell (o qualsiasi altro processo) è in esecuzione con screen.

Inoltre, il comando setenv non sembra riconoscere il carattere ~. Ho provato ad aggiungere uno setenv simile a uno screenrc temporaneo e $PATH contenuto un carattere letterale ~. bash sembra riconoscere la sintassi ~ in $PATH, ma altre shell no. Sostituire ~ per $HOME, che riconosce screen.

5

Lo farei con qualche magia bash. Prova ad aggiungere qualcosa di simile al file ~/.screenrc:

screen -t "window" bash -ic 'PATH=~/src/my_proj/bin/:$PATH bash' 

Per maggiori dettagli e per avere questo set per le finestre appena creati utilizzando Ctrl-a Ctrl+c o Ctrl-a c vedi la mia risposta ad un altro posto: https://stackoverflow.com/a/21717641/1413849

+0

Il problema che ho con questa soluzione è che la routine di inizializzazione della shell ha la precedenza su questa. Ad esempio, modifico PATH in ~/.bashrc, che lo ignora. – ajwood

+0

Non dovrebbe cancellare le modifiche poiché probabilmente dovrebbero semplicemente aggiungere elementi alle variabili ambientali esistenti, in particolare PATH. Il peggio che dovrebbe succedere è se fanno qualcosa del tipo: 'PATH = $ PATH:/some/other/dir' o' PATH =/some/other/dir' come non avresti modo di impostare '/ some/other/dir' ha la precedenza su altre directory. C'è un esempio più concreto che causa problemi nel farlo in questo modo? –

1

per me la linea

setenv PATH /home/someuser/bin:$PATH 

nel file screenrc ha fatto il trucco.

Penso che l'espansione di "~" in "/ home/someuser" sia bash specifica e non funzionerà all'interno dello screenrc.

0

Per quanto mi riguarda, ho appena impostato ambiente in ~/.bash_profile o ~/.bashrc

case $TERM in 
screen*) 
    export PS1='[\u:screen \w]\$ ' 
    ;; 
*) 
    export PS1='[\u \w]\$ ' 
    ;; 
esac 

Ha funzionato, godere.

+0

Questo è simile alla risposta di Keith Thompson, tranne che raccomanda di usare l'esistenza '$ STY' invece di' $ TERM == 'screen'' – ajwood

Problemi correlati