Câu trả lời:
Đối với nền:
Trước tiên hãy giải quyết chức năng của những điều này. Để tham khảo xem Hướng dẫn Bash-Scripting nâng cao .
2>&-
Hình thức chung của cái này là M>&-
, trong đó "M" là số mô tả tệp. Điều này sẽ đóng đầu ra cho bất kỳ mô tả tập tin nào được tham chiếu, tức là "M" .
2>/dev/null
Hình thức chung của cái này là M>/dev/null
, trong đó "M" là số mô tả tệp. Điều này sẽ chuyển hướng mô tả tập tin, "M" , đến /dev/null
.
2>&1
Hình thức chung của cái này là M>&N
, trong đó "M" & "N" là các số mô tả tệp. Nó kết hợp đầu ra của bộ mô tả tập tin "M" và "N" thành một luồng duy nhất.
|&
Đây chỉ là viết tắt cho 2>&1 |
. Nó đã được thêm vào trong Bash 4.
&>/dev/null
Đây chỉ là viết tắt cho >/dev/null 2>&1
. Nó chuyển hướng mô tả tập tin 2 (STDERR) và mô tả 1 (STDOUT) đến /dev/null
.
>/dev/null
Đây chỉ là viết tắt cho 1>/dev/null
. Nó chuyển hướng mô tả tập tin 1 (STDOUT) đến /dev/null
.
Tôi đã không xử lý nhiều với các vỏ khác bên ngoài csh
và tcsh
. Kinh nghiệm của tôi với 2 người này so với các toán tử chuyển hướng của bash, đó là bash vượt trội hơn về mặt đó. Xem trang người đàn ông tcsh để biết thêm chi tiết.
Trong số các lệnh bạn đã hỏi về không có lệnh nào được hỗ trợ trực tiếp bởi csh / tcsh. Bạn sẽ phải sử dụng các cú pháp khác nhau để xây dựng các chức năng tương tự.
2>&-
vs 2>/dev/null
(khác với một số chương trình được viết "kém" không hoàn tác 2>&-
chính xác)?
&>
đã bash
bắt đầu ngay từ đầu (và phá vỡ khả năng tương thích của Bourne và POSIX vì nó có nghĩa là một cái gì đó khác biệt ở đó, mặc dù không có khả năng bị tấn công). >&
và |&
đến từ (t)csh
(và đó là cách duy nhất của họ để chuyển hướng stderr). Họ đã ở zsh
từ đầu và chỉ được thêm vào gần đây bash
. Xem thêm rc
cho các nhà khai thác được thiết kế tốt hơn.
(+2-2=0)
. Bây giờ, đến phần phiên bản, tôi không chỉnh sửa nhiều, nhưng trong trường hợp này tôi sẽ làm thế, vì nó làm rõ rằng dữ liệu sau khi hoạt động sẽ ở N
. Tôi đã đọc bạn trả lời thông qua, và nó rất tốt về mọi mặt. Chỉ sự mơ hồ nhỏ này đã khiến tôi suy nghĩ, đó là lý do tại sao phiên bản. Nhưng ok, hãy thoải mái để thêm hoặc từ chối nó, như bạn muốn. Tôi hy vọng tôi có thể giải thích điểm. Hãy tiếp tục phát huy.
Điều này là để chuyển hướng STDERR & STDOUT:
2>/dev/null
Chuyển hướng STDERR sang / dev / null (ngăn không hiển thị trên bảng điều khiển)
|&
Chuyển hướng STDERR và STDOUT sang STDIN của lệnh đường ống (cmd1 | & cmd2)
&>/dev/null
Chuyển hướng cả STDERR & STDOUT sang / dev / null (không có gì hiển thị trên bảng điều khiển)
>/dev/null
Chuyển hướng STDOUT sang / dev / null (chỉ STDERR hiển thị trên bảng điều khiển)
2>&-
Là để đóng một mô tả tập tin được sử dụng với chuyển hướng
Đây là tất cả các phương pháp chuyển hướng tiêu chuẩn cho đạn Bourne.
|&
và &>/dev/null
là không cầm tay.
Hãy coi đây là một phụ lục cho câu trả lời đã chọn. Bạn có thể muốn biết hình thức nào là POSIX và hình thức nào không.
Hai hình thức POSIX có liên quan:
2.7.2 Chuyển hướng đầu ra
Hai định dạng chung để chuyển hướng đầu ra là:
[n]> từ
[n]> | từ
Trong đó n tùy chọn đại diện cho số mô tả tập tin. Nếu số bị bỏ qua, chuyển hướng sẽ tham chiếu đến đầu ra tiêu chuẩn (mô tả tệp 1).
Chuyển hướng đầu ra sử dụng định dạng '>' sẽ thất bại nếu tùy chọn noclobber được đặt (xem mô tả của tập -C) và tệp được đặt tên bởi sự mở rộng của từ tồn tại và là một tệp thông thường. Mặt khác, chuyển hướng bằng cách sử dụng '>' hoặc "> |" các định dạng sẽ làm cho tệp có kết quả tên từ việc mở rộng từ được tạo và mở cho đầu ra trên bộ mô tả tệp được chỉ định hoặc đầu ra tiêu chuẩn nếu không được chỉ định. Nếu tập tin không tồn tại, nó sẽ được tạo ra; nếu không, nó sẽ bị cắt ngắn thành một tập tin trống sau khi được mở.
-
2.7.6 Sao chép bộ mô tả tệp đầu ra
Toán tử chuyển hướng:
[n]> & từ
sẽ sao chép một bộ mô tả tệp đầu ra từ một cái khác, hoặc sẽ đóng một cái. Nếu từ ước tính thành một hoặc nhiều chữ số, bộ mô tả tệp được ký hiệu là n hoặc đầu ra tiêu chuẩn nếu n không được chỉ định, sẽ được tạo thành một bản sao của bộ mô tả tệp được ký hiệu bằng từ; nếu các chữ số trong word không đại diện cho một bộ mô tả tệp đã mở cho đầu ra, sẽ xảy ra lỗi chuyển hướng; xem Hậu quả của lỗi Shell. Nếu từ ước tính thành '-', mô tả tệp n hoặc đầu ra tiêu chuẩn nếu n không được chỉ định, sẽ bị đóng. Nỗ lực đóng một bộ mô tả tệp không mở sẽ không cấu thành lỗi. Nếu từ đánh giá đến một cái gì đó khác, hành vi là không xác định.
Vì thế:
Function POSIX-compat POSIX
2>&- Yes close
2>/dev/null Yes redir
2>&1 Yes dup
|& No
&>/dev/null No
>/dev/null Yes redir
>&/dev/null ? ?dup
Dòng cuối cùng không có trong câu hỏi ban đầu, nhưng nó hoạt động mà không có khiếu nại trong bash. (Cũng hoạt động với / dev / tty thay thế cho / dev / null).
&>
khả năng tương thích bash GNU, nhưng chúng tôi khuyến khích không sử dụng điều này, vì phân tích cú pháp có thể phá vỡ ngữ nghĩa của các tập lệnh POSIX hiện tại và mksh đã vô hiệu hóa chế độ POSIX.