जवाबों:
आप इसके साथ कर सकते हैं 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.