Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành Unix] Bẫy kinh điển: thứ tự > và 2>&1

    Bẫy kinh điển: thứ tự > và 2>&1

    Chuyển hướng được xử lý trái sang phải, và 2>&1 nghĩa là "fd 2 trỏ tới đích hiện tại của fd 1" — chứ không phải "luôn theo fd 1".

    Hai lệnh sau khác nhau:

    • cmd > file 2>&1: trước hết fd 1 → file; rồi fd 2 → đích hiện tại của fd 1 = file. → cả hai vào file.
    • cmd 2>&1 > file: trước hết fd 2 → đích hiện tại của fd 1 = terminal; rồi fd 1 → file. → stdout vào file, stderr vẫn ra terminal.

    Cho thứ tự hai toán tử, in đích cuối cùng của fd 1 và fd 2. Đích ban đầu của cả hai là terminal; file là file.

    Ví dụ I/O: > file 2>&1 → fd1=file, fd2=file.

    • Định dạng đầu vào:

      Một dòng: hai token theo thứ tự, mỗi token là >file (fd1→file) hoặc 2>&1 (fd2→đích hiện tại fd1). Cách nhau bởi dấu cách.

    • Ràng buộc đầu vào:

      Đúng 2 token.

    • Định dạng đầu ra:

      Dòng 1: fd1=<đích>. Dòng 2: fd2=<đích>.

    Ví dụ:

    Đầu vào:

    >file 2>&1
    

    Đầu ra:

    fd1=file
    fd2=file

    Giải thích:

    `>file` đặt fd1=file trước; rồi `2>&1` cho fd2 theo đích hiện tại của fd1 = file. Cả hai vào file.

    Đang tải editor...