क्लोजिंग टर्मिनल के बिना सभी चर साफ़ करें


10

मैं जानना चाहता हूं कि टर्मिनल को बंद किए बिना कमांड प्रॉम्प्ट में परिभाषित किए गए सभी चर कैसे साफ़ करें ?

उदाहरण के लिए, अगर मैं कमांड प्रॉम्प्ट में एक चर सेट करता हूं:

$ a=1

अब मैं $aटर्मिनल को बंद किए बिना चर (और इसी तरह से परिभाषित कई अन्य चर) को हटाना चाहता हूं । मैं उपयोग कर सकता था, unsetलेकिन अगर कोई बड़ा नहीं है तो यह बहुत व्यस्त होगा। चर का


2
exec "$0"हो सकता है - लेकिन यह बताना कठिन है कि आपका वैश्विक अर्थ क्या है ।
23

3
तुम ऐसा क्यों करना चाहते हो।
हौके लैजिंग

1
@HaLLaging मैं स्क्रिप्ट का उपयोग करके सरणियों के साथ काम कर रहा हूं। मैं कभी-कभी इसमें एक तत्व जोड़ता हूं। जिसके कारण मैं स्क्रिप्ट को पुराने मानों से चलाता हूं (क्योंकि सरणी बदली गई है)। मुझे टर्मिनल बंद करना होगा और फिर से एक नया सत्र शुरू करना होगा। मुझे आशा है कि मैंने स्पष्ट कर दिया है। अगर नहीं तो कृपया मुझे बताएं :)
एडवर्ड टॉर्वाड्स

1
@muru - वह एक को बचाया एक सूची हो जाता है $varसाथ var=$(declare -p +F);तो गुजरता है कि एक समारोह जो करता है के लिए एक तर्क के रूप echo "${2%%=*}".कि इस सवाल का जवाब विशाल आकार के साथ कुछ समस्या है - अगर आपकी पर्यावरण विशाल नहीं है बल्कि यह काम करना चाहिए।
मोकेसर

3
मुझे पता नहीं है कि आप क्या करने की कोशिश कर रहे हैं। क्या आप एक इंटरैक्टिव शेल या एक स्क्रिप्ट के बारे में बात कर रहे हैं? एक इंटरेक्टिव शेल से निष्पादित स्क्रिप्ट में सेट चर मूल शैल को प्रभावित नहीं करते हैं। हमें बताएं कि आप क्या हासिल करना चाहते हैं, न कि आप किस अंतिम छोर पर जा रहे हैं
गाइल्स का SO- बुराई से दूर रहना '

जवाबों:


10

यदि आप (GNU कोरुटिल्स)

exec env --ignore-environment /bin/bash

आप एक नए और नए वातावरण का उपयोग करेंगे


किस बारे में exec "$0"?
एडवर्ड टोरवाल्ड्स

@edwardtorvalds $0एक निष्पादित शेल में शून्य तर्क है। तो, आप चला रहे हैं bash $0है bash (- यह हो सकता है शायद -bashएक में -lसंस्करण के आधार पर ogin खोल मामले) । यदि आप एक स्क्रिप्ट को #!/bin/bashबैंगलाइन के साथ चला रहे हैं , $0तो स्क्रिप्ट का मार्ग है। exec "$0"शायद अधिक लचीला है, लेकिन exec bashअधिक स्पष्ट है। यदि आप एक टर्मिनल पर उस कमांड को दर्ज करते हैं, तो bashइसे एक इंटरैक्टिव वातावरण में पहचानना चाहिए और इसके बराबर करना चाहिए bash -i- जो आपकी ~/.bashrcफ़ाइल को भी चलाएगा।
mikeserv

यह मदद नहीं करता है export a=123, कि चर विरासत में मिला है ...
21

1

आप उपयोग कर सकते हैं env, जो जीएनयू कोर्यूटिल्स (आमतौर पर जीएनयू / लिनक्स सिस्टम पर प्रीइंस्टॉल्ड) द्वारा प्रदान किया जाता है:

exec env --ignore-environment /bin/bash

निष्पादन प्रणाली कॉल इसलिए है कि आपकी वर्तमान प्रक्रिया को आपके शेल के नए, पर्यावरण-कम संस्करण द्वारा इन-प्लेस किया गया है।

इससे किसी भी निर्यात किए गए पर्यावरण चर को भी साफ़ करने का लाभ है ।


लेकिन यह मेरे संशोधित पेट वैरिएबल को स्पष्ट करेगा, उदाहरण के लिए export PATH=$PATH:~/foo, सही?
एडवर्ड टोरवाल्ड्स

तुम सही हो। मैंने अपना उत्तर संशोधित कर दिया है, ताकि $ 0 के बजाय शेल का निरपेक्ष पथ उपयोग किया जाए।
user30747

User30747 के लिए धन्यवाद, मेरा उत्तर सही करने के लिए आपका चोरी हो गया। स्वीकार किए गए उत्तर को नहीं हटाया जा सकता है
गिलेस क्वेनोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.