2

在使用 VMware 的 Ubuntu 13.04 中,我有两个终端(PID 1000 - /dev/pts0,PID 2000 - /dev/pts2)如果我从终端 2 执行此操作(/dev/pts2)...

echo 'ls -al' > /proc/1000/fd/0

我可以看到“ls -al”在终端 0(/dev/pts0) 中提示,但这只是一个视觉结果,而不是终端 0 的真实命令输入。

在此处输入图像描述

我想要的是通过 /proc/pid(terminal 0's)/fd/0 将终端 2 的实际命令输入重定向到终端 0 并从终端 0 执行命令。

这可能吗??,如果是,我该怎么做?

先感谢您。

4

2 回答 2

2

这是不可能的,因为当键盘事件<ENTER>发生时 bash 会做两件事。

  1. 打印换行符。
  2. 执行输入的命令,如果命令完成。

命令完成时的逻辑并不简单。它取决于条件语句,反斜杠等。

将 '\n' 字符重定向到标准输入只会执行第一步。我想这在设计上是不可能的,因为可以由另一个 shell 控制的 shell 对每个安全工程师来说都是可怕的。

在多用户 linux 上,您将能够在由不同用户(例如 root)运行的 shell 上编写和执行命令。你可以做讨厌的事情(例如责备其他用户做被禁止的事情)。

如果您仍然需要解决方案:

您可以编写一个脚本,从管道读取命令并在不同的用户下执行它们,但请注意:这不安全。

于 2014-06-27T11:19:13.620 回答
0

There is a difference between a terminal and a shell. When you see a pts window, there are both a terminal-emulator (pts) and a shell (bash) running there. Bash is reading lines from the pts device and executes commands. Bash writes its stdout/stderr back into the pts device, and the programs started by bash do so too. But the pts itself is just a glorified serial terminal. It displays characters written into it, and you (bash) can read characters typed into it. Usually it also echoes (displays) the typed characters.

When you write into a pts device from another terminal, it displays the characters, but these characters cannot be read from the pts device. You (bash) can only read from the pts what a user types.

The confusing thing is that displaying characters written into the pts device (this is what you tried) and echoing the typed characters look exactly the same.

于 2014-06-30T09:14:42.720 回答