2009-12-04 14 views
7

से stdout और stderr रीडायरेक्ट करने के लिए कैसे निम्न स्क्रिप्ट के लिएcsh स्क्रिप्ट

install.csh:

 
#!/bin/csh -f 
tar -zxf Python-3.1.1.tgz 
cd Python-3.1.1 
./configure 
make 
make install 
cd .. 
rm -rf Python-3.1.1 

इरादे से उपयोग:

./install.csh |& tee install.log 

मैं कैसे स्क्रिप्ट तो बदल सकते हैं कि मुझे अभी भी एक install.log और कंसोल पर आउटपुट प्राप्त करने के बिना उपयोगकर्ता को रीडायरेक्ट करने के लिए कहा जाता है?

उत्तर

7

कुछ सरल समाधान:

समाधान 1: टी हर पंक्ति आप स्वतंत्र रूप से प्रवेश करने के लिए, टी की -a स्विच के उपयोग संलग्न करने के लिए

#!/bin/csh -f  
tar -zxf Python-3.1.1.tgz |& tee -a install.log 
cd Python-3.1.1 |& tee -a install.log 
./configure |& tee -a install.log 
make |& tee -a install.log 
make install |& tee -a install.log 
cd .. |& tee -a install.log 
rm -rf Python-3.1.1 |& tee -a install.log 

समाधान 2 बनाना चाहते हैं: एक दूसरी स्क्रिप्ट जोड़ें। उदाहरण के लिए,, install_commands करने के लिए वर्तमान install.csh नाम बदलने फिर एक नया install.csh स्क्रिप्ट जोड़ने:

#!/bin/csh -f 
/bin/csh install_commands |& tee install.log 
+0

धन्यवाद। मैं सोच रहा था कि कुछ और चाल हो सकती है जो मुझे एक सुरुचिपूर्ण समाधान की ओर जाने के बारे में नहीं पता। –

+0

ओह। इसे विभाजित करने के लिए अच्छी कॉल दो स्क्रिप्ट में। +1 अभी भी नहीं लगता कि आपको सीएसएच के साथ चिपके रहना चाहिए! (-: –

3

G'day,

मैं अत्यधिक csh से बैश या zsh की तरह कुछ की दिशा में दूर जा रहा सलाह देते हैं।

सीडीएच में stdio मैनिपुलेशन संभव नहीं है। "csh programming considered harmful" का एक पठन लें। इस विषय पर एक सुरुचिपूर्ण ग्रंथ।

क्षमा करें यह सीधा जवाब नहीं है, लेकिन आप पाएंगे कि आप सीएसएच की बाधाओं के खिलाफ अपने सिर को टक्कर लगी रहेंगे जितनी देर तक आप चिपके रहेंगे।

बहुत सी सीएस सिंटैक्स पहले से ही बैश में उपलब्ध है, इसलिए आपका सीखने की वक्र बहुत खड़ी नहीं होगी।

बैश में लिखी गई एक ही चीज़ के लिए यहां एक त्वरित सुझाव दिया गया है। हालांकि यह सुरुचिपूर्ण नहीं है।

#!/bin/bash 
TO_LOGFILE= "| tee -a ./install.log" 
tar -zxf Python-3.1.1.tgz 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Untar of Python failed. Exiting..."; exit 5 
fi 

cd Python-3.1.1 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Can't change into Python dir. Exiting..."; exit 5 
fi 
echo "============== configure ================" 
./configure 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Configure failed. Exiting..."; exit 5 
fi 
echo "================ make ===================" 
make 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Compile of Python failed. Exiting..."; exit 5 
fi 
echo "================ install ================" 
make install 2>&1 ${TO_LOGFILE} 
if [ $? -ne 0 ];then 
    echo "Install of Python failed. Exiting..."; exit 5 
fi 

cd .. 
rm -rf Python-3.1.1 2>&1 ${TO_LOGFILE} 
exit 0 

मैं थोड़ा और अधिक जाँच और रिपोर्टिंग जोड़ दिया है ताकि अगर वहाँ पहले के किसी चरण लॉग फ़ाइल बस में शामिल होंगे जब तक त्रुटि से बहुत बेकार त्रुटि संदेशों में से एक ढेर के बजाय खुला था में एक समस्या है बाद के चरणों जो वैसे भी पूरा नहीं होगा।

चियर्स,

+0

मैं बैश में ऐसा कैसे करूं? –

+0

@ शेलली, जोड़ा गया। (-: –

+0

@ शेल, ओह। भूल गए कि आप कंसोल पर डुप्लिकेट करना चाहते थे। –

0

आप इसे एक subshell में चलाने के लिए और यह सब उत्पादन अनुप्रेषित कर सकते हैं। याद रखें अगर यह सीएसएस में काम करता है, तो मैंने इसका इस्तेमाल लंबे समय से किया है।

#!/bin/csh -f 
(
tar -zxf Python-3.1.1.tgz 
cd Python-3.1.1 
./configure 
make 
make install 
cd .. 
rm -rf Python-3.1.1 
) |& tee install.log