2013-05-24 38 views
17

Tôi đang chạy một lệnhNgăn chặn đầu ra khỏi các lệnh không phải PowerShell?

hg st 

và sau đó kiểm tra nó $LASTEXITCODE để kiểm tra tính sẵn sàng của lanh lợi trong thư mục hiện hành. Tôi không quan tâm đến sản lượng của nó và không muốn hiển thị nó cho người dùng của tôi.

Làm cách nào để ngăn chặn TẤT CẢ đầu ra, thành công hoặc lỗi?

Vì mercurial không phải là một lệnh PowerShell hg st | Out-Null không hoạt động.

Trả lời

47

Out-Null hoạt động tốt với các lệnh không phải PowerShell. Tuy nhiên, nó không ngăn chặn đầu ra trên STDERR, chỉ trên STDOUT. Nếu bạn muốn ngăn chặn đầu ra trên STDERR cũng bạn phải chuyển hướng mà mô tả tập tin để STDOUT trước khi đường ống đầu ra vào Out-Null:

hg st 2>&1 | Out-Null 

2> chuyển hướng tất cả các đầu ra từ STDERR (file descriptor 2 #). &1 hợp nhất đầu ra được chuyển hướng với đầu ra từ STDOUT (bộ mô tả tệp # 1). Sau đó, đầu ra kết hợp được in thành STDOUT từ nơi ống có thể cấp nó vào STDIN của lệnh tiếp theo trong đường ống (trong trường hợp này là Out-Null). Xem Get-Help about_Redirection để biết thêm thông tin.

+0

ảnh vui nhộn. Điều đó hoạt động. Bạn có thể giải thích cú pháp '2> & 1' thực sự có ý nghĩa gì không? –

+0

'2> & 1' có nghĩa là" lỗi tiêu chuẩn chuyển hướng đến cùng một vị trí như đầu ra tiêu chuẩn ". –

+0

@Bill_Stewart Tôi tin rằng đó là những gì tôi đã nói, chỉ có tôi giải quyết cả hai phần của toán tử một cách riêng biệt, bởi vì các luồng khác có thể được hợp nhất với STDOUT (luồng đầu ra thành công, thực sự). –

2

cũng có thể làm được điều này

hg st *> $null 

Powershell suppress console output

+0

Điều này sẽ không chặn STDERR chẳng hạn nếu 'hg' không được cài đặt –

+0

@GeorgeMauer Không có đề xuất của tôi. Lỗi do môi trường máy chủ lưu trữ không được chuyển hướng. –

+1

Lưu ý rằng toán tử chuyển hướng '*>' không có sẵn trước PowerShell v3. –

Các vấn đề liên quan