Экран GNU с запущенным сценарием инициализации bash

Я уверен, что ответ на этот вопрос есть в руководстве по экранированию, но я не могу его найти! Я хочу, чтобы оболочка bash, созданная экраном GNU, была источником в файле в дополнение к .bashrc, который он уже запускает.

Я не могу вызвать файл в .bashrc, потому что на нашем сайте файлы .bashrc автоматически восстанавливаются при входе в систему.

Есть идеи?

РЕДАКТИРОВАТЬ:

Я создал этот небольшой скрипт (screen_bash.sh):

bash --rcfile ~/.screen_bashrc

Затем добавил

shell $HOME/screen_bash.sh

На мой .screenrc

Файл ~/.screen_bashrc был

<my_setup_stuff>
export SHELL=bash

SHELL=bash необходим, чтобы такие программы, как vim, могли правильно запускать вложенные оболочки.


person Greg Reynolds    schedule 12.06.2009    source источник
comment
Если пользовательский сценарий инициализации будет .bash_profile (как в моем случае), то содержимое screen_bash.sh будет лучше: bash --login   -  person janos    schedule 08.07.2012


Ответы (3)


Вы хотите, чтобы этот файл загружался каждый раз, когда открывается новое окно экрана? Если да, то команда shell позволяет перезаписать то, что запускать, когда вы создаете новое окно экрана (по умолчанию это просто $SHELL). Вы можете установить это как сценарий по вашему выбору, который в конце запускает вашу оболочку.

person swampsjohn    schedule 12.06.2009
comment
Спасибо - этот и другой ответ разобрали меня. - person Greg Reynolds; 12.06.2009
comment
можешь опубликовать ответ. У меня тот же вопрос, и я до сих пор не знаю, как вызвать мой ~/.bash_profile из .screenrc - person Nick Vanderbilt; 06.05.2010

screen bash --rcfile yourfile.rc

yourfile.rc должен быть источником .bashrc.

EDIT: на самом деле это не то, что вы хотите, я просто понял, что вы, вероятно, хотите, чтобы это применялось ко всем оболочкам, запускаемым screen.

person Michiel Buddingh    schedule 12.06.2009
comment
Спасибо - я поместил ваше предложение в свой .screenrc с помощью команды оболочки (как описано выше), и это сработало. - person Greg Reynolds; 12.06.2009

Я делал это раньше, но теперь я понял, что лучше запускать как службу инициализации системы. Вы можете найти мой скрипт прикрепленным к этому отчету об ошибке. Надеюсь, он будет доступен как часть экранного ебилда в Gentoo. Я буду обновлять его на 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
}
person errordeveloper    schedule 01.09.2011