Đó là trao đổi stdout
và stderr
.
>name
có nghĩa là chuyển hướng đầu ra đến tập tin name
.
>&number
có nghĩa là chuyển hướng đầu ra đến mô tả tập tin number
.
Vì vậy, &
cần thiết để nói với shell bạn có nghĩa là một mô tả tệp, không phải là một tên tệp.
Một mô tả tập tin là một số đề cập đến một tập tin đã mở. Các tiêu chuẩn là 0
cho đầu vào tiêu chuẩn, 1
cho đầu ra tiêu chuẩn hoặc 2
cho lỗi tiêu chuẩn. Bạn cũng có thể sử dụng bất kỳ số nào khác, sẽ tạo một bộ mô tả tệp mới, giống như khi bạn tạo một biến mới với var=value
.
Theo mặc định, cả bộ mô tả tệp 1
và 2
đi đến /dev/tty
, vì vậy nếu bạn chạy somecommand 3>&1 1>&2 2>&3
trong trình bao mới, nó không thay đổi bất cứ điều gì (ngoại trừ bây giờ bạn có bộ mô tả tệp số 3).
Nhưng nếu ở đâu đó sớm hơn trong tập lệnh, nó thực hiện chuyển hướng bằng cách sử dụng exec (ví dụ exec 2>error.log
) hoặc tập lệnh được chạy với một dòng lệnh bao gồm chuyển hướng (ví dụ ./thescript 2>error.log
), sau đó trao đổi stdout và stderr sẽ làm gì đó.
Trong trường hợp cụ thể của bạn, lệnh đó có thiết bị xuất chuẩn và thiết bị lỗi chuẩn được hoán đổi là dialog
. Nhìn vào trang người đàn ông của nó , tôi thấy
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
Vì vậy, có lẽ người đã viết kịch bản muốn dialog
đầu ra stdout
thay vì stderr
một số lý do.
Xem thêm Thứ tự chuyển hướng