बिना किसी आउटपुट के "सीडी -" का उपयोग करें


28

मैं cd -किसी भी आउटपुट को प्रतिध्वनित किए बिना कमांड कैसे चला सकता हूं ?
मैंने कोशिश की cd - 2>&1 /dev/nullलेकिन वह गंतव्य निर्देशिका को प्रिंट करता है।
इसका कारण यह है कि मैं इसे बैश फ़ंक्शन का उपयोग करना चाहूंगा और मैं अनावश्यक आउटपुट नहीं करना पसंद करूंगा।

जवाबों:


32

इसे इस तरह आज़माएं:

cd - > /dev/null

आप भी कर सकते हैं:

cd - > uselessfile

यह आउटपुट को STDOUT के बजाय "बेकार" फाइल में भेज देगा।

आप फ़ाइल बनाने या अधिलेखित करने के बजाय भी संलग्न कर सकते हैं।

cd - >> uselessfile

15

@ येरेवोक ने पहले ही सवाल का जवाब दिया , लेकिन मैं यह समझाने में एक छुरा ले जाऊंगा कि वास्तव में क्या हो रहा है और आप जो व्यवहार कर रहे हैं उसे क्यों देख रहे हैं।

समस्या आपके पुनर्निर्देशन के साथ है। आप लिख रहे हैं:

cd - 2>&1 /dev/null

क्योंकि पुनर्निर्देशन कमांड लाइन के भीतर कहीं भी दिखाई दे सकते हैं (आप इसे कुछ सरल के साथ स्वयं की पुष्टि कर सकते हैं echo a b 2>&1 c </etc/fstab d), पुनर्निर्देशन के बाद वास्तव में हो जाता है:

cd - /dev/null

समस्या देखें? आप दो तर्क पारित कर रहे हैं cd, एक तर्क और दो पुनर्निर्देशन नहीं। चूंकि आप कभी भी एक समय में cdकेवल एक वर्तमान निर्देशिका में हो सकते हैं, केवल इसके पहले तर्क पर विचार करता है, जो इस मामले में है -

आप जो लिखने का इरादा रखते हैं, वह cdstderr और 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


5

शायद आप उपयोग कर सकते हैं

cd $OLDPWD

लेकिन इस मामले में आपको अधिक टाइपिंग की आवश्यकता होगी :)

लेकिन आपको एक फायदा होगा: यदि कोई त्रुटि है तो संदेश / dev / null में पुनर्निर्देशित नहीं होगा।


1
यदि $OLDPWDआप परेशान हैं, तो यह आपको छोड़ देगा ~cd -एक त्रुटि प्रिंट करेगा (और संभवत: आपको वहीं छोड़ देगा जहां आप पहले से थे)।
एक सीवीएन

1
आपने सही नहीं किया है। यदि $ OLDPWD अप्रभावित है (क्यों? हो सकता है कि उपयोगकर्ता इसे अनसेट कर सकता है), तो 'cd -' का परिणाम "cd $ OLDPWD" के समान है। मैनुअल पेज की जाँच करें ('सीडी -' के बराबर है "सीडी" $ ओएलडीपीडब्ल्यूडी "और& pwd ')। या आप इसका परीक्षण कर सकते हैं :) 'OLDPWD = ""; सीडी - '- आप ~ में ड्रॉप और एक ~ चरित्र प्रिंट देखेंगे।
uzsolt

1
मैंने अभी इसका परीक्षण किया। मेरे सिस्टम पर, अनुक्रम दूसरी सीडी में cd /tmp bash cd -कहता है bash: cd: OLDPWD not set; जबकि अनुक्रम cd /tmp bash cd $OLDPWDआपको ~ (लगभग निश्चित रूप से क्योंकि $ OLDPWD एक खाली स्ट्रिंग में फैलता है) में छोड़ देता है। cd $OLDPWDएक बार ठीक काम करेगा जब आपने cdप्रश्न में शेल के भीतर कम से कम एक किया है , लेकिन तब से पहले नहीं।
एक CVn

हम्म, हाँ, आपने सही कहा है। मैंने zsh के साथ परीक्षण किया है और zsh के साथ त्रुटि संदेश नहीं छोड़ा है।
uzsolt

1

रीडायरेक्ट स्टडआउट और स्टडर: cd - &>/dev/null

के &>लघु हाथ संस्करण है cd - 2>/dev/null 1>&2, जो मुझे लगता है कि आप का उपयोग करने का मतलब है ...

  • नोट &>को bash> = 4.0 की आवश्यकता है।

Ps। अधिकांश आदेश स्थानों पर इंगित किए जा सकते हैं, इसलिए यह संभावना नहीं है कि आपको वास्तव में इसकी आवश्यकता हैcd


0

आप उपयोग कर सकते हैं:

cd ~-

के अनुसार बैश मैन पेज के अनुसार Tilde Expansion:

यदि टिल्ड-प्रीफ़िक्स एक `~ ~ 'है, तो शेल वैरिएबल OLDPWD का मान, यदि यह सेट है, प्रतिस्थापित किया जाता है।

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