Tôi chỉ có thể trả lời cho phần thực hiện:
exec mà không có lệnh được cung cấp có thể được sử dụng để thay đổi chuyển hướng I/O. <> trong trường hợp này có nghĩa là mở để đọc + ghi. 5 là số kênh (hoặc bộ mô tả tập tin). Điều này có ý nghĩa nếu các lệnh khác gửi đầu ra/đọc đầu vào của chúng từ kênh 5.
Đối với "/ dev/tcp/$ {SERVER}/$ {PORT}" Tôi không biết đó có phải là một tính năng cụ thể không Phiên bản Linux hoặc nếu nó là một tính năng bash (tôi giả định sau này).
- EDIT: từ trang bash dẫn sử dụng: -
Bash handles several filenames specially when they are used
in redirections, as described in the following table:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is
duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a TCP connection to
the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a UDP connection to
the corresponding socket.
Có một caveat quan trọng về câu trả lời này.Bash sẽ chỉ tôn vinh "/ dev/tcp" * nếu * hỗ trợ cho nó được kích hoạt khi bash được xây dựng. Đặc biệt, Red Hat xây dựng bash với nó được kích hoạt, trong khi Debian không (hoặc ít nhất là họ không phải là lần cuối cùng tôi kiểm tra, mà đã được lứa tuổi trước đây). Đừng mong đợi điều này để làm việc trong tất cả các vỏ, cũng không phải trong tất cả các bash. –
@WilliamPursell Đồng ý! – trojanfoe