gre*_*eth 27 sockets linux bash tcp
我在脚本中找到了这一行.虽然我在全球范围内了解它的作用 - 打开双向TCP连接 - 但我需要对语法进行一些解释.这是行:
exec 5<>"/dev/tcp/${SERVER}/${PORT}"
Run Code Online (Sandbox Code Playgroud)
我的问题是:
<并且>通常用于重定向IO.那是什么意思?它可以在另一个环境中使用吗?怎么样?/dev/tcp而不存在?exec必要?(没有任何实际执行)谢谢.
tro*_*foe 17
<和>通常用于重定向IO.那是什么意思?它可以在另一个环境中使用吗?怎么样?
它是相同的 - 输入和输出被重定向到fd 5.
为什么它可以工作,而/ dev/tcp不存在?
这是一个特殊文件:如果host是有效的主机名或Internet地址,并且port是整数端口号或服务名,则bash会尝试打开与相应套接字的TCP连接.
为什么5?可以是另一个号码吗?允许的值是多少?
是的,它可以是任何值,但您需要确保不使用已经使用的fd.
为什么exec是必要的?(没有任何实际执行)
exec表示重定向发生在当前shell中,而不是在子shell中.
我只能回答 exec 部分:
没有给出命令的 exec 可用于更改 I/O 重定向。在这种情况下,<> 表示打开以进行读+写。5 是通道号(或文件描述符)。如果其他命令从通道 5 发送其输出/读取其输入,则这是有意义的。
对于“/dev/tcp/${SERVER}/${PORT}”,我不知道它是特定 Linux 版本的功能还是 bash 功能(我假设是后者)。
-- 编辑:来自 bash 手册页:--
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14270 次 |
| 最近记录: |