पर्यावरण चर के एक समूह हैं जिन्हें आप देख सकते हैं लेकिन उनमें से कई पता नहीं लगाएंगे कि एक अलग खोल बाश से उत्पन्न होता है या नहीं। निम्नलिखित पर विचार करें:
bash$ echo "SHELL: $SHELL, shell: $shell, ARGV[0]: $0, PS1: $PS1, prompt: $prompt"
SHELL: /bin/bash, shell: , ARGV[0]: -bash, PS1: bash$ , prompt:
bash$ csh
[lorien:~] daveshawley% echo "SHELL: $SHELL, shell: $shell, \$0: $0, PS1: $PS1, prompt: $prompt"
SHELL: /bin/bash, shell: /bin/tcsh, ARGV[0]: csh, PS1: bash$ , prompt: [%m:%c3] %n%#
[lorien:~] daveshawley% bash -r
bash$ echo "SHELL: $SHELL, shell: $shell, ARGV[0]: $0, PS1: $PS1, prompt: $prompt"
SHELL: /bin/bash, shell: , ARGV[0]: sh, PS1: bash$ , prompt:
bash$ zsh
% echo "SHELL: $SHELL, shell: $shell, ARGV[0]: $0, PS1: $PS1, prompt: $prompt"
SHELL: /bin/bash, shell: , ARGV[0]: zsh, PS1: % , prompt: %
% ksh
$ echo "SHELL: $SHELL, shell: $shell, ARGV[0]: $0, PS1: $PS1, prompt: $prompt"
SHELL: /bin/bash, shell: , ARGV[0]: ksh, PS1: bash$ , prompt:
सिवाय इसके कि वे उप गोले द्वारा विरासत में मिला जा रहा है जो वह जगह है जहाँ पर्यावरण बात वास्तव में टूट जाता है की एक आदत है कि विभिन्न गोले के लिए विशिष्ट चर का एक संख्या में हैं। लगभग एक चीज जो लगभग काम करती है ps -o command -p $$
है। यह तकनीकी रूप से आपको कमांड नाम देता है जिसे खोल चल रहा है। ज्यादातर मामलों में यह काम करेगा ... चूंकि एप्लिकेशन exec
सिस्टम कॉल के कुछ प्रकार के साथ शुरू किए गए हैं और यह कमांड के नाम और निष्पादन योग्य के लिए अनुमति देता है, इसके लिए भी असफल होना संभव है। पर विचार करें:
bash$ exec -a "-csh" bash
bash$ echo "$0, $SHELL, $BASH"
-csh, /bin/bash, /bin/bash
bash$ ps -o command -p $$
COMMAND
-csh
bash$
एक और चाल lsof -p $$ | awk '(NR==2) {print $1}'
उपयोग करने के लिए है। यह शायद उतना करीब है जितना आप प्राप्त कर सकते हैं यदि आप भाग्यशाली हैं lsof
आसान है।
'$ SHELL' पर भरोसा करने से पहले इसे बैश के भीतर से आज़माएं: 'csh -c 'echo" $ SHELL "' –
प्रश्न का मेरा प्रभाव यह है कि स्क्रिप्ट को लॉगिन खोल जानने की आवश्यकता है। लॉगिन खोल के रूप में बैश का उपयोग करके, उस कमांड को चलाने से बैश वापस आना चाहिए, जिसकी अपेक्षा की जाती है। – Jeff
लॉगिन खोल नहीं है। यदि आप बैश का उपयोग लॉगिन करते हैं तो सीएसएच में बदलें, $ SHELL बैश बनी हुई है, लेकिन 'स्रोत' विफल हो जाएगी। –