Đó là trao đổi stdoutvà stderr.
>namecó nghĩa là chuyển hướng đầu ra đến tập tin name.
>&numbercó 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à 0cho đầu vào tiêu chuẩn, 1cho đầu ra tiêu chuẩn hoặc 2cho 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 1và 2đi đến /dev/tty, vì vậy nếu bạn chạy somecommand 3>&1 1>&2 2>&3trong 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 stdoutthay vì stderrmột số lý do.
Xem thêm Thứ tự chuyển hướng