यदि आप कमांड प्रॉम्प्ट खोलते हैं और इसे टाइप करते हैं:
echo foobar > nul
यह तब से कुछ भी प्रिंट नहीं करेगा nul
इसके सभी इनपुट निगलता है। लेकिन अगर आप पावरशेल के साथ कमांड चलाते हैं:
powershell "echo foobar" > nul
यह उत्पादन होगा foobar
कंसोल के लिए। यह क्यों है, और मैं इसे ठीक करने के लिए क्या कर सकता हूं?
संपादित करें: यहाँ का उत्पादन है $PSVersionTable
। ऐसा लगता है कि मैं PowerShell v5.0 का उपयोग कर रहा हूं।
उत्तर:
जवाब के लिए 5 № 1नोट: मैं आपको मान रहा हूं "से अपना आदेश आवेदक कर रहा हूं cmd.exe, PowerShell के भीतर से नहीं, जो मैं देख रहा हूं लक्षणों के अनुरूप है।
मेथिंक आप "एक पर ठोकर खाई है बग पीएस (पावरशेल) v5 में (v3 में मौजूद नहीं है; प्रश्न पर टिप्पणियों का सुझाव है कि यह भी v4 में नहीं है), हालांकि मैं पूरी तरह समझ नहीं पा रहा हूं पुनश्च दोषी है, क्योंकि मुझे उम्मीद है cmd.exe
पुनर्निर्देशन को संभालने के लिए।
मुझे कुछ याद आ रहा है, हालांकि, मुझे बताएं।
शक्ति कोशिका चाहिए इसकी तथाकथित सफलता स्ट्रीम भेजें - डिफ़ॉल्ट रूप से चीजें आउटपुट, जिसमें शामिल हैं echo
, जो एक उपनाम है Write-Output
- बाहरी दुनिया के लिए stdout.
पुराने पीएस संस्करणों में >NUL
प्रभावी रूप से PowerShell के आउटपुट को दबा देता है।
उत्सुकता से, v5 में बग केवल प्रभावित करता है NUL
, जबकि एक को पुनर्निर्देशित करते हैं वास्तविक फ़ाइल काम करता है।
से संबंधित समाधान:
यदि आपका कोड v2- संगत है, इसे इस्तेमाल करे:
powershell -version 2 "echo foobar" > NUL
अन्यथा, एक पर रीडायरेक्ट करें वास्तविक फाइल को बाद में हटाएं और हटाएं:
powershell "echo foobar" > "%TEMP%NUL-bug-workaround" & del "%TEMP%NUL-bug-workaround"