`>&` 的两个版本中哪一个用于 `[n]>&/dev/tcp/localhost/9999`?

`>&` 的两个版本中哪一个用于 `[n]>&/dev/tcp/localhost/9999`?

我不确定是否解释/dev/tcp/localhost/9999为整数(文件描述符)或文件名。

因此,我不确定“重定向标准输出和标准错误” (1) 或 “复制文件描述符Bash 手册的 (2) 部分适用于上述重定向。

无论是否指定,重定向都有效n,但是 (1) 不带参数n,这意味着不使用 (1) 吗?

此外,如果/dev/tcp/localhost/9999被认为是文件名(不是整数),为什么<&1下面的命令有效?:

/bin/bash >&/dev/tcp/localhost/9999 <&1

在这种情况下,1(stdout) 不是一个打开用于输入的文件描述符,导致 (2) 失败?

答案1

/dev/tcp/host/port<无论您是否使用, >or <>(和>&or &>in bash),都将始终以读写方式打开。

>& /dev/tcp/host/port将连接到host:port标准输出和标准错误并将其重定向到它。

黑客在幕后/dev/tcp使用socket(2)connect(2),并且没有明显且一致的方法来使用 tcp 套接字,就好像它是仅打开用于读取或写入的文件描述符一样。

文件描述符只是数字 1 并称自己为 stdout 并不意味着它不开放输入:cat <&1也可以在终端中使用。

无论是否指定 n,重定向都有效,但 (1) 不采用 n 参数,这意味着不使用 (1)?

不在这里。

true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect

相关内容