जवाबों:
आप इसके साथ कर सकते हैं env
:
env -i your_command
नीचे टिप्पणियों के विपरीत, यह पूरी तरह से पर्यावरण को साफ करता है, लेकिन यह your_command
नए चर को स्थापित करने से नहीं रोकता है । विशेष रूप से, एक शेल /etc/profile
चलाने से चलाने का कारण होगा , और शेल कुछ सेटिंग्स में भी निर्मित हो सकता है।
आप इसके साथ जांच कर सकते हैं:
env -i env
यानी पर्यावरण को मिटाओ और फिर उसे छापो। आउटपुट रिक्त होगा।
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
प्रिंट /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
।
PATH
, PWD
और SHLVL
बैश द्वारा स्वचालित रूप से सेट किया जाता है। +1।
env -i bash --norc -c "declare -p PATH"
देता है declare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
। नोट के लिए "-x" निर्यात (और इसलिए पर्यावरण का हिस्सा) यदि आप इसे अपने आप को निर्यात: env -i bash --norc -c "export PATH; declare -p PATH"
देता हैdeclare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
एक "स्वच्छ" bash
वातावरण के साथ हो सकता है
$ env -i bash --noprofile --norc
env -i
आदेश आदेश निष्पादित कार्यक्रम के पर्यावरण के लिए पुराने खोल पर्यावरण के निर्यात वातावरण चर के किसी भी स्थानांतरित किए बिना कमांड लाइन पर यह करने के लिए दिया निष्पादित करता है।
--noprofile
विकल्प बंद हो जाता है bash
सिस्टम-वाइड या व्यक्तिगत खोल आरंभीकरण स्क्रिप्ट है कि अन्यथा एक लॉगिन खोल के लिए पढ़ने के लिए किया जाएगा पढ़ने से।
--norc
विकल्प बंद हो जाता है bash
व्यक्तिगत खोल आरंभीकरण स्क्रिप्ट है कि अन्यथा एक इंटरैक्टिव खोल के लिए पढ़ने के लिए किया जाएगा पढ़ने से।
env -i
? आप किस सिस्टम पर हैं?
env
मेरे पर्यावरण को साफ करने के लिए, और --noprofile
सोर्सिंग / आदि / प्रोफाइल और दोस्तों --norc
से बचने के लिए , और सोर्सिंग से बचने के लिए ~ / .bashrc और दोस्तों।
env -i somecommand
एक खाली वातावरण में एक कमांड चलाता है, जैसा कि एम्स ने पहले ही उल्लेख किया है ।
बहुत सारे कार्यक्रम कुछ महत्वपूर्ण पर्यावरण चर पर निर्भर करते हैं, इसलिए आप उन्हें बनाए रखना चाहते हैं:
env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand
वैकल्पिक रूप से, आप एक छोटे लॉगिन-टाइम वातावरण में लॉग इन कर सकते हैं।
ssh localhost somecommand
env
समर्थन नहीं करता है --
और env -i FOO=bar -- env
नाम की एक कमांड चलाने का प्रयास करता है --
।
env -i -- FOO=bar env
वास्तव में होना चाहिए । मेरी गलती। ऐसा नहीं है कि यह तब --
से उपयोगी है जब तक कि यह इसके साथ शुरू नहीं होता है -
।
जबकि स्वीकृत उत्तर सही है, आप आमतौर पर क्या करना चाहते हैं:
env -i bash -l -c "printenv; and any other commands"
यह आपको नंगे लेकिन कार्यात्मक बैश देता है (जैसा कि आप गैर-संवादात्मक मोड में लॉगिन करते समय प्राप्त करेंगे)। उदाहरण के लिए यह भाषा, समयक्षेत्र, गृह, आदि सेट करता है।
env -i
क्लीयर HOME
, जिसका मतलब है कि bash -l
आपका .bash_profile
आदि नहीं मिल सकता है । यदि आप एक शेल चाहते हैं जो आपको नए लॉगिन पर मिलेगा, तो आपको HOME
पहले सेट करने के लिए एक अतिरिक्त अप्रत्यक्ष की आवश्यकता होगी ।
यहाँ अधिकांश उत्तरों के साथ समस्या यह है कि यह env -i
साफ़ हो जाता है HOME
, इसलिए भले ही आप bash -l
अंदर की तरफ भागते हों , लेकिन यह आपके .bash_profile
आदि को नहीं पढ़ेगा । इसके बजाय यह चाहते हैं:
env -i HOME="$HOME" bash -l -c 'your_command'
उदाहरण:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
bash
शेल चलेगा .bash_login
या .bash_profile
। एक स्वच्छ वातावरण प्राप्त करने के लिए, उपयोग करें --noprofile
, या HOME
एक निर्देशिका में सेट करें जिसमें उन फ़ाइलों को नहीं है। मुझे लगता है कि यह इस बात पर निर्भर करता है कि "क्लीन" से आपका क्या मतलब है।
env -i bash -c ...
। यह उत्तर विशेष रूप से तब होता है जब आप एक शेल चाहते हैं जो ऐसा लगता है जैसे आपने मशीन पर एक नया लॉगिन किया था।
बाल्की की टिप्पणी का जवाब देने के लिए (और प्रक्रिया में मेरे अपने प्रश्न का उत्तर देना :-):
% echo Environment in calling shell: vars: $(env |wc -l); echo; ./du; echo; cat du
Environment in calling shell: vars: 43
==> This is the environment: vars: 5
PATH="$PATH"
PWD=/Users/nick
SHLVL=1
SOMETHING_TO_KEEP="$USER"
_=/usr/bin/env
==> The end.
#!/usr/bin/env -i SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh
echo "==> This is the environment: vars:" $(/usr/bin/env | /usr/bin/wc -l)
/usr/bin/env
echo "==> The end."
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
तो मुझे यह मिलता है:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.