2009-06-12 9 views
5

Estoy seguro de que hay una respuesta a esto en el manual para la pantalla, ¡pero no puedo encontrarlo! Quiero que el shell bash generado por la pantalla GNU se origine en un archivo además del .bashrc que ya se ejecuta.Pantalla GNU ejecutando un guion init de bash

No puedo hacer una llamada al archivo en .bashrc porque en nuestro sitio los archivos .bashrc se regeneran automáticamente al iniciar sesión.

¿Alguna idea?

EDIT:

he creado este pequeño script (screen_bash.sh):

bash --rcfile ~/.screen_bashrc 

Luego añade

shell $HOME/screen_bash.sh 

Para mi .screenrc

El ~/.screen_bashrc el archivo era

<my_setup_stuff> 
export SHELL=bash 

El SHELL = bash es necesario para que los programas como vim puedan ejecutar subconjuntos correctamente.

+0

Si el guión de inicio personalizada pasa a ser '.bash_profile' (como en mi caso), entonces el contenido de' screen_bash.sh' es mejor como: 'fiesta --login' – janos

Respuesta

4

¿Desea que este archivo se obtenga cada vez que se abre una nueva ventana de pantalla? Si es así, el comando shell le permite sobrescribir lo que se ejecuta cuando crea una nueva ventana de pantalla (de manera predeterminada solo es $ SHELL). Puede configurar esto para que sea un script de su elección que al final ejecuta su shell.

+0

Gracias - esta y la otra respuesta me solucionaron. –

+0

puede publicar la respuesta. Tengo la misma pregunta y todavía no estoy seguro de cómo invocar mi ~/.bash_profile desde .screenrc –

2
screen bash --rcfile yourfile.rc 

yourfile.rc si la fuente .bashrc.

EDITAR: Esto en realidad no hace lo que quiere, me he dado cuenta es probable que desee que se aplique a todos los conchas iniciadas por pantalla.

+0

Gracias - Pongo su sugerencia en mi .screenrc usando el comando de shell (como se describe arriba) y funcionó. –

0

Lo había estado haciendo antes, pero ahora me di cuenta de que es mejor ejecutarlo como un servicio de inicio del sistema. Puede encontrar mi script adjunto al this bug report. Esperemos que esté disponible como parte del ebuild de pantalla en Gentoo. Lo mantendré actualizado en 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 
} 
Cuestiones relacionadas