2009-06-12 8 views
5

Jestem pewien, że istnieje odpowiednia odpowiedź w podręczniku na ekranie, ale nie mogę go znaleźć! Chcę, aby powłoka bash spawnowana przez GNU screen pochodziła z pliku oprócz pliku .bashrc, który już działa.Ekran GNU z uruchomionym skryptem startowym bash

Nie mogę zadzwonić do pliku w .bashrc, ponieważ na naszej stronie .bashrc pliki są automatycznie regenerowane przy logowaniu.

Wszelkie pomysły?

EDIT:

Stworzyłem ten mały skrypt (screen_bash.sh):

bash --rcfile ~/.screen_bashrc 

Następnie dodaje

shell $HOME/screen_bash.sh 

W moim .screenrc

~/.screen_bashrc plik był

<my_setup_stuff> 
export SHELL=bash 

SHELL = bash jest niezbędny, aby programy takie jak vim mogły poprawnie uruchamiać podpowłoki.

+0

Jeśli skrypt niestandardowy startowych dzieje się '.bash_profile' (jak w moim przypadku), wówczas zawartość' screen_bash.sh' jest lepiej jak: 'bash --login' – janos

Odpowiedz

4

Czy chcesz, aby ten plik był pobierany za każdym razem, gdy otwierane jest nowe okno? Jeśli tak, polecenie shell pozwala na nadpisanie tego, co jest uruchamiane podczas tworzenia nowego okna ekranu (domyślnie jest to tylko $ SHELL). Możesz ustawić to na wybrany skrypt, który na końcu uruchomi twoją powłokę.

+0

Dzięki - ta i inna odpowiedź mnie rozwiązały. –

+0

możesz opublikować odpowiedź. Mam to samo pytanie i nadal nie jestem pewien, jak wywołać mój ~/.bash_profile z .screenrc –

2
screen bash --rcfile yourfile.rc 

yourfile.rc źródło .bashrc.

EDIT: To naprawdę nie robić, co chcesz, po prostu sobie sprawę, że prawdopodobnie ma to zastosowanie do wszystkie muszle rozpoczęte przez ekran.

+0

Dzięki - położę sugestia w moim .screenrc za pomocą polecenia powłoki (jak opisano powyżej) i zadziałało. –

0

Robiłem to już wcześniej, ale teraz zdałem sobie sprawę, że lepiej jest uruchomić jako usługa inicjalizacji systemu. Możesz znaleźć mój skrypt dołączony do this bug report. Mam nadzieję, że będzie on dostępny jako część ebuildu ekranowego w Gentoo. Będę na bieżąco informowany o github.

start() { 

for SCREENRC in /etc/screen.d/* ; do 

    SESSION="$(basename $SCREENRC)" 

    ## I don't think there may be a security issue, 
    ## provided that users will not be have write 
    ## permission in /etc/screen.d/ and if anyone 
    ## gained access to mod the session file, they 
    ## are in already anyhow! 
    BELONGS="$(stat $SCREENRC --printf=%U)" 

    MYSHELL="$(getent passwd $BELONGS | cut -d: -f7)" 


    COMMAND="/usr/bin/screen -- -U -D -m -c ${SCREENRC} -S ${SESSION} -t ${SESSION}" 

    ## Why on earth would one write this ??? 
    #HOMEDIR="$(getent passwd $BELONGS | cut -d: -f6)" 

    ebegin "Starting screen session ${SESSION} for ${BELONGS}" 

    PIDFILE="/var/run/screen.${BELONGS}.${SESSION}.pid" 

    start-stop-daemon \ 
     --env TERM="rxvt" \ 
     --env HOME="~${BELONGS}" \ 
     --env SCREEN_SESSION=${SESSION} \ 
     --user $BELONGS \ 
     --chdir "~${BELONGS}" \ 
     --make-pidfile \ 
     --background \ 
     --pidfile=${PIDFILE} \ 
     --exec ${COMMAND} 
    eend $? 
done 

} 




stop() { 

## Perhaps we should determin this by pidfiles ... 
## but this way is not bad either! 
for SCREENRC in /etc/screen.d/* ; do 

    SESSION="$(basename $SCREENRC)" 
    BELONGS="$(stat $SCREENRC --printf=%U)" 

    PIDFILE="/var/run/screen.${BELONGS}.${SESSION}.pid" 
    PROCESS="$(cat ${PIDFILE})" 

    if [ -e /proc/${PROCESS}/status ]; then 

    grep -i "Name:" /proc/${PROCESS}/status | grep -iq "screen" || continue 

    ebegin "Stopping screen session ${SESSION} for ${BELONGS} (PID: ${PROCESS})" 

    ## There other things we can try here ... 
    ## perhaps add /etc/screen.d/$SESSION.stop 

    ## It will CERTAINly kill the righ screen! 
    CERTAIN="${PROCESS}.${SESSION}" 
    env TERM="urxvt" \ 
     start-stop-daemon \ 
      --user ${BELONGS} \ 
      --exec /usr/bin/screen -- -S $CERTAIN -X quit 
    eend $? 

    fi 

    rm -f $PIDFILE 

done 
} 
Powiązane problemy