5

当使用 -T 和 -t 运行相同的 ssh 命令时,任何 stderr 输出分别到达 stderr 和 stdout。

未分配 pty: ssh -T user@host "echo >&2 foo" 1>/tmp/out 2>/tmp/err

输出写入/tmp/err.

使用 pty 分配:ssh -t user@host "echo >&2 foo" 1>/tmp/out 2>/tmp/err

输出现在写入/tmp/out.

我有点理解,使用 pty 模拟了一个完整的伪屏幕,并且输出处于原始模式。发送到屏幕的输出然后通过 stdout 发送回 ssh,并且 ssh 的 tty 也设置为原始模式。有人可以进一步解释吗?

4

1 回答 1

11

tty 没有单独的输出和错误通道。只有一个输出通道;无论你写什么,它都只会发送到 CRT、串行端口、终端窗口、调制解调器、打印机或任何连接到 tty 的东西。

在为运行命令分配 tty 时,ssh理论上可以将命令的 stdin 和 stdout 附加到 tty,而相反地将命令的 stderr 附加到与 tty 完全分离的单独的 stderr 通道(管道)。但是,这不符合在 tty 上运行的命令应该将其所有 3 个 stdio 通道连接到同一个 tty 的约定,并且某些命令可能会混淆或表现不同。所以ssh选择遵循惯例。

使用 tty 时,可以ssh自由地将命令的标准输入、标准输出和标准错误附加到 3 个单独的单向管道。

于 2013-05-30T15:00:28.913 回答