2012-02-22 39 views
7

Tôi muốn biết whats & nghĩa trong báo cáo:Whats sự khác biệt giữa 2> 1>/dev/null và 2> & 1>/dev/null

2>&1 > /dev/null 

nó chuyển hướng stderr để stdout và sau đó để bit xô nhưng whats & trong nó?

Tôi có thể sử dụng nó như:

2>1 >/dev/null 
+2

Chắc chắn, nếu bạn muốn xuất stderr thành tệp có tên "1". – cHao

+1

Điều này có giúp ích cho http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ – KK99

+0

@cHao: có điểm ur hay không. – kailash19

Trả lời

7

Các & nghĩa mô tả tập tin. Vì vậy, 2>&1 chuyển hướng stderr đến bất kỳ giá trị nào hiện tại trỏ đến, trong khi 2>1 chuyển hướng stderr vào một tệp có tên là 1

Ngoài ra, chuyển hướng xảy ra theo thứ tự. Vì vậy, nếu bạn nói 2>&1 >/dev/null, nó chuyển hướng stderr để chỉ ra những gì stdout hiện trỏ đến (có thể là một noop), sau đó chuyển hướng stdout thành/dev/null. Bạn có thể muốn >/dev/null 2>&1

+0

Vì vậy, & để nói với FD. Truy vấn trong tâm trí của tôi: thì tại sao chúng ta không sử dụng nó trong trường hợp 2 (stderr)? ow shell biết rằng 2 (không có &) là FD? – kailash19

+0

Ý của bạn là gì? Cú pháp là fd> file hoặc fd> & fd bất kể bạn đang sử dụng số nào cho các vị trí "fd". – tripleee

+1

kailash19: Đọc lại bài đăng ở trên. Lưu ý rằng '... trong khi 2> 1 chuyển hướng stderr vào một tệp có tên là 1'. Vì vậy, hãy thử: 'printf" xxx \ n "2> 1; ls -l 1'. Tệp ở đó (nhưng trống) và xxx xuất hiện trên màn hình của bạn. Điều đó là hợp pháp và hữu ích để chuyển hướng đầu ra stderr sang một tệp, tức là 'myCmd 2>/tmp/myCmd.stderr.out.txt', đúng không? nhưng điều đó khác với thao tác những gì xảy ra với stdout '& 1', và stderr '& 2'. Nó không phải là một cú pháp hoàn toàn trực quan. Bởi vì tôi không cần phải sử dụng nó rất thường xuyên, thậm chí một năm> 10, tôi vẫn phải tìm kiếm điều này nếu tôi muốn làm điều gì đó mới mẻ hoặc khác biệt. Chúc mọi người may mắn. – shellter

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