~/.bashrc
अगर मैं इंटरैक्टिव मोड में चल रहा हूं, या, ssh पर एक कमांड निष्पादित कर रहा हूं, तो मैं कैसे बता सकता हूं । .bashrc
अगर यह बाद में है तो मैं एएनएसआई से बचने के दृश्यों के मुद्रण से बचना चाहता हूं ।
~/.bashrc
अगर मैं इंटरैक्टिव मोड में चल रहा हूं, या, ssh पर एक कमांड निष्पादित कर रहा हूं, तो मैं कैसे बता सकता हूं । .bashrc
अगर यह बाद में है तो मैं एएनएसआई से बचने के दृश्यों के मुद्रण से बचना चाहता हूं ।
जवाबों:
के अनुसार man bash
:
PS1 सेट और $ है - इसमें i भी शामिल है यदि बैश इंटरेक्टिव है, तो इस राज्य का परीक्षण करने के लिए शेल स्क्रिप्ट या स्टार्टअप फाइल की अनुमति मिलती है।
तो आप उपयोग कर सकते हैं:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
इसके अलावा:
जब एक इंटरेक्टिव शेल जो लॉगिन शेल नहीं है, तो bash पढ़ता है और /etc/bash.bashrc और ~ / .bashrc से कमांड निष्पादित करता है, अगर ये फाइलें मौजूद हैं।
तो ~/.bashrc
केवल इंटरैक्टिव गोले के लिए sourced है। कभी-कभी, लोग इसे स्रोत से ~/.bash_profile
या ~/.profile
जो गलत है क्योंकि यह अपेक्षित व्यवहार में हस्तक्षेप करता है। यदि आप कोड के रखरखाव को सरल बनाना चाहते हैं, जो कि सामान्य कोड है, तो आपको एक अलग फाइल का उपयोग करना चाहिए, जिसमें सामान्य कोड और स्रोत दोनों स्वतंत्र रूप से फाइल से हो।
यह सबसे अच्छा है अगर कोई आउटपुट नहीं है rc
जैसे कि लॉगिन फाइल से स्टडआउट ~/.bash_profile
या ~/.profile
क्योंकि यह rsync
उदाहरण के लिए उचित संचालन में हस्तक्षेप कर सकता है ।
किसी भी मामले में, यह अभी भी अन्तरक्रियाशीलता के लिए परीक्षण करने के लिए एक अच्छा विचार है क्योंकि गलत कॉन्फ़िगरेशन मौजूद हो सकता है।
[[ $- =~ i ]] && echo interactive
i
~/.bash_profile
या ~/.profile
जो गलत है क्योंकि यह अपेक्षित व्यवहार अधिकार के साथ हस्तक्षेप करता है । आप सोर्सिंग ~/.bashrc
से क्या समझते हैं ~/.bash_login
? जैसा कि लॉगिन शेल को इंटरैक्टिव होने की आवश्यकता नहीं है मुझे लगता है कि यह गलत है, भी।
उपयोग:
if tty -s; then echo interactive; fi
test
उपकरण (आदमी पृष्ठ से) इस के लिए जाँच कर सकते हैं:
-t FD True if FD is opened on a terminal.
तो आप उदाहरण के लिए उपयोग कर सकते हैं:
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
या
if [ -t 1 ] ; then
echo stdout is a terminal
fi
bash <<< 'test -t 0 && echo Y || echo X'
लिखता है Y
, bash -c 'test -t 0 && echo Y || echo X'
लिखते हैंX
मैं आमतौर पर प्रोग्राम ट्टी के आउटपुट को देखता हूं।
यदि आप एक tty पर हैं, तो यह आपको बताएगा कि आप किस tty पर हैं। यदि आप इंटरेक्टिव मोड में नहीं हैं, तो यह आम तौर पर आपको "ट्टी नहीं" जैसा कुछ बताएगा।