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