hiểu một chuỗi các chuyển hướng


8

Nếu một số chuyển hướng được sử dụng cùng nhau, việc thay đổi thứ tự của chúng có tạo ra sự khác biệt không?

Làm thế nào người ta sẽ hiểu ý nghĩa của thứ tự của họ? Là kênh xích của các chuyển hướng được xây dựng như đọc các chuyển hướng từ trái sang phải, hoặc từ phải sang trái?

Ví dụ

command 2>&1 > somefile

command > somefile 2>&1

Cảm ơn và trân trọng!

Câu trả lời:


7

Vâng, thứ tự tạo ra sự khác biệt, và chúng nên được đọc từ trái sang phải.

command 2>&1 >somefilecó nghĩa là chuyển hướng stderr (2) đến đích hiện tại của thiết bị xuất chuẩn (thiết bị đầu cuối). Sau đó thay đổi thiết bị xuất chuẩn để đi đến somefile. Vì vậy, stderr đi đến thiết bị đầu cuối, và thiết bị xuất chuẩn đi đến một tập tin.

command >somefile 2>&1có nghĩa là chuyển hướng thiết bị xuất chuẩn đến somefile, và sau đó chuyển hướng thiết bị xuất chuẩn đến cùng đích với thiết bị xuất chuẩn (tệp). Vì vậy, cả stderr và stdout đi đến somefile.

Điều này được giải thích trong phần 3.6 của hướng dẫn Bash: Chuyển hướng .


1
man bash 

nói:

GIẢM GIÁ Trước khi một lệnh được thực thi, đầu vào và đầu ra của nó có thể được chuyển hướng bằng cách sử dụng một ký hiệu đặc biệt được giải thích bởi trình bao. Việc chỉnh sửa cũng có thể được sử dụng để mở và đóng tệp cho môi trường thực thi shell hiện tại. Các vở opera chuyển hướng sau đây có thể đi trước hoặc xuất hiện ở bất cứ đâu trong một lệnh đơn giản hoặc có thể tuân theo một lệnh. Chuyển hướng được xử lý theo thứ tự chúng xuất hiện, từ trái sang phải.

Lưu ý rằng thứ tự chuyển hướng là đáng kể. Ví dụ: lệnh

ls > dirlist 2>&1

chỉ đạo cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn cho danh sách tập tin, trong khi lệnh

ls 2>&1 > dirlist

chỉ hướng đầu ra tiêu chuẩn vào danh sách dirlist, vì lỗi tiêu chuẩn được nhân đôi từ đầu ra tiêu chuẩn trước khi đầu ra tiêu chuẩn được chuyển hướng đến dirlist.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.