जवाबों:
@ येरेवोक ने पहले ही सवाल का जवाब दिया , लेकिन मैं यह समझाने में एक छुरा ले जाऊंगा कि वास्तव में क्या हो रहा है और आप जो व्यवहार कर रहे हैं उसे क्यों देख रहे हैं।
समस्या आपके पुनर्निर्देशन के साथ है। आप लिख रहे हैं:
cd - 2>&1 /dev/null
क्योंकि पुनर्निर्देशन कमांड लाइन के भीतर कहीं भी दिखाई दे सकते हैं (आप इसे कुछ सरल के साथ स्वयं की पुष्टि कर सकते हैं echo a b 2>&1 c </etc/fstab d
), पुनर्निर्देशन के बाद वास्तव में हो जाता है:
cd - /dev/null
समस्या देखें? आप दो तर्क पारित कर रहे हैं cd
, एक तर्क और दो पुनर्निर्देशन नहीं। चूंकि आप कभी भी एक समय में cd
केवल एक वर्तमान निर्देशिका में हो सकते हैं, केवल इसके पहले तर्क पर विचार करता है, जो इस मामले में है -
।
आप जो लिखने का इरादा रखते हैं, वह cd
stderr और stdout / / dev / null दोनों के पुनर्निर्देशन के साथ एक कमांड है। ऐसा करने के दो तरीके हैं।
आपके मामले में सबसे आसान यह होगा कि आप उस खोल को सूचित करें जिसे आप एक >
चरित्र जोड़कर पुनर्निर्देशन चाहते हैं । यही @erewok सुझाव दे रहा है।
cd - 2>&1 >/dev/null
यह पहले फ़ाइल डिस्क्रिप्टर 1 (stdout) में stderr (फाइल डिस्क्रिप्टर 2) को रीडायरेक्ट करता है, फिर stdout (निहित 1) को / dev / null में रीडायरेक्ट करता है। ध्यान दें कि आदेश देना महत्वपूर्ण है; यदि आप रीडायरेक्ट को उल्टा करते हैं तो आपको वही परिणाम नहीं मिलेगा, हालांकि कुछ मामलों में ऐसा प्रतीत हो सकता है कि आप ऐसा इसलिए करते हैं क्योंकि विशेष प्रोग्राम संबंधित आउटपुट स्ट्रीम का उपयोग कैसे करता है।
वैकल्पिक रूप से, जैसा कि @demure द्वारा सुझाया गया है , आप &>
एक ही बार में दोनों धाराओं को पुनर्निर्देशित करने के लिए उपयोग कर सकते हैं यदि यह सिंटैक्स आपके शेल में समर्थित है।
cd - &>/dev/null
ध्यान दें कि इन विकल्पों में से कोई भी त्रुटि तब मौन $OLDPWD
नहीं होगी जब अब मौजूद नहीं है, क्योंकि आप सिस्टम ब्लैक होल में मानक त्रुटि आउटपुट पुनर्निर्देशित कर रहे हैं। यदि यह चिंता का विषय है, तो मैं $?
बाद में जाँच करूँगा ; आपको इसकी स्वयं पुष्टि करनी चाहिए कि क्या यह वास्तविक चिंता है, लेकिन कम से कम मेरे परीक्षणों में, एक असफल cd
(चाहे cd $someplace
या cd -
) $? = 1
सफलता के बाद सेट हो $? = 0
।
शायद आप उपयोग कर सकते हैं
cd $OLDPWD
लेकिन इस मामले में आपको अधिक टाइपिंग की आवश्यकता होगी :)
लेकिन आपको एक फायदा होगा: यदि कोई त्रुटि है तो संदेश / dev / null में पुनर्निर्देशित नहीं होगा।
cd /tmp
bash
cd -
कहता है bash: cd: OLDPWD not set
; जबकि अनुक्रम cd /tmp
bash
cd $OLDPWD
आपको ~ (लगभग निश्चित रूप से क्योंकि $ OLDPWD एक खाली स्ट्रिंग में फैलता है) में छोड़ देता है। cd $OLDPWD
एक बार ठीक काम करेगा जब आपने cd
प्रश्न में शेल के भीतर कम से कम एक किया है , लेकिन तब से पहले नहीं।
रीडायरेक्ट स्टडआउट और स्टडर:
cd - &>/dev/null
के &>
लघु हाथ संस्करण है cd - 2>/dev/null 1>&2
, जो मुझे लगता है कि आप का उपयोग करने का मतलब है ...
&>
को bash> = 4.0 की आवश्यकता है।Ps। अधिकांश आदेश स्थानों पर इंगित किए जा सकते हैं, इसलिए यह संभावना नहीं है कि आपको वास्तव में इसकी आवश्यकता हैcd
$OLDPWD
आप परेशान हैं, तो यह आपको छोड़ देगा~
।cd -
एक त्रुटि प्रिंट करेगा (और संभवत: आपको वहीं छोड़ देगा जहां आप पहले से थे)।