Trong một kịch bản PS tự động hoá một số nhiệm vụ SVN tôi có chức năng sau:Làm thế nào để ngăn chặn đầu ra stderr trong Powershell?
function SvnUrlExists($url)
{
svn info $url | out-null 2>&1
return $?
}
Kể từ khi công khai này kiểm tra xem một số URL kho SVN tồn tại, tôi không quan tâm chút nào trong bất kỳ đầu ra lỗi. Tuy nhiên, bất chấp tất cả mọi thứ tôi thấy về chuyển hướng stderr
trong Powershell cho thấy 2>&1
để chuyển hướng nó vào stdout
, này vẫn kết quả đầu ra một thông báo lỗi:
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
Thật không may, điều này messes nặng lên đầu ra của kịch bản của tôi.
Tôi đang làm gì sai và làm cách nào để loại bỏ đầu ra lỗi này?
Ngoài ra, nếu bạn có một lệnh lớn hơn, bạn có thể bọc nó trong '$() | out-null' để có được hiệu ứng tương tự. Ví dụ: '$ (svn info $ url 2> &') | out-null'. Tôi làm điều này khi lệnh là rất dài, hoặc tôi cần phải phá vỡ nó trên một vài dòng trong một kịch bản. – Nick
@Nick: Ah, cảm ơn. Tuy nhiên, nó sẽ không phải là '$ (svn info $ url) 2> & 1 | out-null'? (Lưu ý vị trí của '2> & 1'.) – sbi
Oh wow, tôi hoàn toàn hiểu sai bài đăng của bạn. Có, nó phải là '$ (svn info $ url) | out-null'. Nó phụ thuộc vào nơi bạn muốn kiểm tra lỗi xảy ra cho '2> & 1'. Tôi không thể nói mà không thử nghiệm nó, nhưng tôi không nghĩ rằng nó sẽ quan trọng nếu nó là bên trong ')' hoặc bên ngoài. Bạn có thể thực sự có thể chỉ để lại '2> & 1' hoàn toàn, như tôi đã nói, mà không thử nghiệm tôi không thể chắc chắn. – Nick