2012-08-15 17 views
12

एक पी एस स्क्रिप्ट में मैं निम्नलिखित कार्य हो कुछ SVN कार्य स्वचालित:पावरहेल में stderr आउटपुट को दबाने के लिए कैसे?

function SvnUrlExists($url) 
{ 
    svn info $url | out-null 2>&1 
    return $? 
} 

इस स्पष्ट रूप से परीक्षण कुछ SVN भंडार यूआरएल मौजूद है या नहीं, मैं किसी भी त्रुटि उत्पादन में दिलचस्पी नहीं है। हालांकि, सब कुछ के बावजूद मैं PowerShell में stderr पुनः निर्देशित 2>&1 सुझाव दे, stdout करने के लिए इसे पुन: निर्देशित करने इस बारे में पाया अभी भी एक त्रुटि संदेश आउटपुट:

 
svn: warning: W170000: URL 'blahblah' non-existent in revision 26762 

svn: E200009: Could not display info for all targets because some targets don't exist 

दुर्भाग्य से, यह गंभीर रूप से मेरे स्क्रिप्ट का आउटपुट खराब करता।

मैं क्या गलत कर रहा हूं, और मुझे इस त्रुटि आउटपुट को कैसे दबाया जाना चाहिए?

उत्तर

15

शायद ज़रुरत पड़े किसी और के रूप में मैंने किया था मिलते-जुलते शब्दों googles:

बाद मैं घंटों के लिए इस के खिलाफ मेरे माथे की पिटाई की है, निश्चित रूप से मैं सवाल यहाँ पोस्ट करने के बाद ही मिनटों के भीतर समाधान नहीं मिला:

svn info $url 2>&1 | out-null 

यह एक आकर्षण की तरह काम करता है।

+0

, अगर आप एक बड़ा आदेश है आप '$ में लपेट कर सकते हैं() | एक ही प्रभाव प्राप्त करने के लिए बाहर निकलना '। उदाहरण के लिए: '$ (svn जानकारी $ url 2> &') | बाहर null'। मैं ऐसा करता हूं जब आदेश बहुत लंबा होता है, या मुझे इसे किसी स्क्रिप्ट में कुछ पंक्तियों में तोड़ने की आवश्यकता होती है। – Nick

+0

@ निक: आह, धन्यवाद। हालांकि, यह '$ (svn जानकारी $ url) 2> और 1 होना चाहिए बाहर null'? ('2> और 1' की नियुक्ति पर ध्यान दें।) – sbi

+0

ओह वाह, मैंने आपकी पोस्ट को पूरी तरह गलत तरीके से पढ़ा है। हां, यह '$ (svn जानकारी $ url) होना चाहिए बाहर null'। यह इस बात पर निर्भर करता है कि आप '2> और 1' के लिए त्रुटि जांच कब चाहते हैं। मैं इसका परीक्षण किए बिना नहीं कह सकता, लेकिन मुझे नहीं लगता कि इससे कोई फर्क नहीं पड़ता कि यह ')' या बाहर के अंदर है। आप वास्तव में '2> और 1' को पूरी तरह बंद कर सकते हैं, जैसे मैंने कहा, बिना परीक्षण के मैं निश्चित नहीं हो सकता। – Nick

3

मतदान किया जवाब मेरे लिए एक त्रुटि उत्पन्न कर सकते हैं। आप केवल stderr उपयोग को दबाने के लिए चाहते हैं

cmd /c "MyProgram MyArguments 2>&1" | Out-Null 
+1

stderr से stdr को रीडायरेक्ट करना अभी भी एक त्रुटि उत्पन्न करेगा और यदि आपके पास $ ErrorActionPreference = 'Stop' है तो स्क्रिप्ट निष्पादन रोकें। लेकिन अगर आप stderr को stdout पर रीडायरेक्ट नहीं करते हैं तो त्रुटि नहीं होगी। अजीब! –

+0

@ राफलाक्लिस: अजीब, वास्तव में; यह _bug_ है: https://github.com/PowerShell/PowerShell/issues/4002 देखें – mklement0

8

: समाधान किया जा रहा है निम्नलिखित समाप्त हो गया इसके अलावा

svn info $url 2>$null