2009-06-12 19 views
5

मुझे यकीन है कि मैन्युअल में स्क्रीन पर इसका उत्तर है, लेकिन मुझे यह नहीं मिल रहा है! मैं चाहता हूं कि जीएनयू स्क्रीन द्वारा उत्पन्न किए गए बैश खोल को .bashrc के अलावा फ़ाइल में स्रोत के लिए तैयार किया जाए जो कि यह पहले से चल रहा है।जीएनयू स्क्रीन एक बैश इनिट स्क्रिप्ट चला रही है

मैं .bashrc में फ़ाइल को कॉल नहीं कर सकता क्योंकि हमारी साइट पर .bashrc फ़ाइलें स्वचालित रूप से लॉगिन पर पुन: उत्पन्न हो जाती हैं।

कोई विचार?

संपादित करें:

bash --rcfile ~/.screen_bashrc 

तब मेरे .screenrc

~/.screen_bashrc करने के लिए

shell $HOME/screen_bash.sh 

कहा:

मैं इस छोटे से स्क्रिप्ट (screen_bash.sh) बनाया फ़ाइल

थी
<my_setup_stuff> 
export SHELL=bash 

SHELL = bash आवश्यक है ताकि vim जैसे प्रोग्राम उप-शैल को सही तरीके से लॉन्च कर सकें।

+0

कस्टम init स्क्रिप्ट (मेरे मामले में) 'होने की .bash_profile' यदि ऐसा होता है, तो' screen_bash.sh' की सामग्री के रूप में बेहतर है: --login' – janos

उत्तर

4

क्या आप चाहते हैं कि यह फ़ाइल हर बार एक नई स्क्रीन विंडो खोला जाए? यदि ऐसा है, तो shell कमांड आपको एक नई स्क्रीन विंडो बनाते समय चलाए जाने वाले ओवरराइट करने की अनुमति देता है (डिफ़ॉल्ट रूप से यह केवल $ SHELL है)। आप इसे अपनी पसंद की एक स्क्रिप्ट बनने के लिए सेट कर सकते हैं जो अंत में आपके खोल को चलाता है।

+0

धन्यवाद - यह और दूसरा जवाब मुझे हल किया गया। –

+0

क्या आप उत्तर पोस्ट कर सकते हैं। मेरे पास एक ही सवाल है और मुझे अभी भी यकीन नहीं है कि .screenrc से मेरा ~/.bash_profile कैसे शुरू करें –

2
screen bash --rcfile yourfile.rc 

yourfile.rc स्रोत चाहिए .bashrc

संपादित: यह वास्तव में आप क्या चाहते हैं, मैं सिर्फ एहसास हुआ कि आप शायद यह करने के लिए सभी गोले स्क्रीन द्वारा शुरू लागू करना चाहते हैं क्या करता है।

+0

धन्यवाद 'बैश - मैं डाल अपने शेल कमांड का उपयोग करके मेरे .screenrc में सुझाव (ऊपर वर्णित अनुसार) और यह काम करता है। –

0

मैं इसे पहले कर रहा था, लेकिन अब मुझे एहसास हुआ कि सिस्टम इनिट सेवा के रूप में चलाने के लिए बेहतर है। आप मेरी स्क्रिप्ट this bug report से जुड़ी पा सकते हैं। उम्मीद है कि यह जेनेटू में स्क्रीन ईबिल्ड के हिस्से के रूप में उपलब्ध होगा। मैं इसे 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 
} 
संबंधित मुद्दे