문제

매뉴얼에 화면에 대한 답이 있다고 확신하지만 찾을 수 없습니다! 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

VIM과 같은 프로그램이 하위 쉘을 올바르게 시작할 수 있도록 Shell = Bash가 필요합니다.

도움이 되었습니까?

해결책

새 화면 창이 열릴 때 마다이 파일이 소스되기를 원하십니까? 그렇다면 껍데기 명령을 사용하면 새 화면 창을 생성 할 때 실행되는 내용을 덮어 쓸 수 있습니다 (기본적으로 $ 쉘입니다). 당신은 이것을 끝에 당신의 껍질을 실행하는 당신의 선택 스크립트로 설정할 수 있습니다.

다른 팁

screen bash --rcfile yourfile.rc

yourfile.rc 소스 .bashrc.

편집하다: 이것은 당신이 원하는 것을 실제로하지 않습니다. 모두 껍질은 화면으로 시작되었습니다.

나는 전에 그것을 해왔지만 이제는 System Init 서비스로 실행하는 것이 더 낫다는 것을 깨달았습니다. 내 스크립트를 찾을 수 있습니다 이 버그 보고서. 잘만되면 Gentoo의 Screen Ebuild의 일부로 사용할 수 있기를 바랍니다. 최신 상태로 유지하겠습니다 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
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top