2013-08-02 30 views
54

Tôi muốn chạy một chương trình (google-chrome) trong nền, nhưng ngăn không cho nó xuất ra bất kỳ tin nhắn nào đến thiết bị đầu cuối.Làm thế nào để chuyển hướng tất cả đầu ra đến/dev/null?

Tôi đã cố gắng làm điều này:

google-chrome 2>&1 1>/dev/null & 

Tuy nhiên, nhà ga vẫn lấp đầy lên mà không có tin nhắn như:

[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] Failed to call method: org.chromium.Mtpd.EnumerateStorag...

Tôi đang làm gì sai? Làm cách nào để chuyển hướng tất cả đầu ra tới /dev/null?

Trả lời

57

Toán tử chuyển hướng được đánh giá từ trái sang phải. những gì bạn đã làm sai được đặt trước tiên là 2>&1, điểm 2 tới cùng một vị trí như 1 hiện được trỏ đến là màn hình thiết bị đầu cuối cục bộ vì bạn chưa chuyển hướng 1. Những gì bạn cần làm là một trong những điều sau đây:

2>/dev/null 1>/dev/null google-chrome & 

hoặc

2>/dev/null 1>&2 google-chrome & 

Các vị trí của các nhà khai thác chuyển hướng trong quan hệ với các lệnh không quan trọng. Bạn có thể đặt chúng trước hoặc sau lệnh.

+0

Cảm ơn bạn đã ký hiệu bitwise: D – erm3nda

+1

Câu trả lời đúng nằm bên dưới trong http://stackoverflow.com/a/18013171/1432614 –

34

Trong sách giáo khoa tham khảo phần Redirection bash cho biết:

The operator [n]>&word is used [...] to duplicate output file descriptors

Để chuyển hướng cả stderrstdout-file bạn nên sử dụng các hình thức

&>file 

liên quan đến trường hợp của bạn có nghĩa là thay

Với
2>&1 1>/dev/null 

với

&>/dev/null 
+3

'>/dev/null 2> & 1' có thể di động hơn' &>/dev/null'? – Campa

1

Có vẻ như cú pháp đó là khác nhau:

./a.out 1>/dev/null 2>&1 & 

Xem các thiết bị cho FD = 2 là khác nhau khi ./a.out 1>/dev/null 2>&1./a.out 2>&1 1>/dev/null &

1) FD = 2 điểm đến/dev/null

>./a.out 1>/dev/null 2>&1 & 
[1] 21181 
>lsof -p `pidof a.out` 
COMMAND PID   USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
a.out 21181 xxxxxxxxxxxxxxx 0u CHR 136,43  0t0  46 /dev/pts/43 
a.out 21181 xxxxxxxxxxxxxxx 1w CHR 1,3  0t0  3685 /dev/null 
a.out 21181 xxxxxxxxxxxxxxx 2w CHR 1,3  0t0  3685 /dev/null 

2) FD = 2 điểm đến/dev/pts/43

>./a.out 2>&1 1>/dev/null & 
[1] 25955 
>lsof -p `pidof a.out` 
COMMAND PID   USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
a.out 25955 xxxxxxxxxxxxxxx 0u CHR 136,43  0t0  46 /dev/pts/43 
a.out 25955 xxxxxxxxxxxxxxx 1w CHR 1,3  0t0  3685 /dev/null 
a.out 25955 xxxxxxxxxxxxxxx 2u CHR 136,43  0t0  46 /dev/pts/43 
Các vấn đề liên quan