Linux通过proc fd0,dev / pts重定向输入

时间:2014-06-27 08:18:13

标签: linux shell proc pts

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

执行此操作
echo 'ls -al' > /proc/1000/fd/0

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

enter image description here

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

  1. 打印换行符。
  2. 执行输入的命令,如果命令已完成。
  3. 命令完成时的逻辑并不简单。它取决于条件语句,反斜杠等。

    重定向&#39; \ n&#39; stdin的字符只会执行第一步。我想这在设计上是不可能的,因为可以由另一个shell控制的shell对于每个安全工程师来说都是可怕的。

    在多用户Linux上,您可以在shell上编写和执行命令,这些命令由不同的用户(例如root)运行。你可以做些讨厌的事情(例如责怪其他用户做禁止的事情)。

    如果您仍需要解决方案:

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

答案 1 :(得分:0)

终端和shell之间存在差异。当你看到一个pts窗口时,有一个终端模拟器(pts)和一个shell(bash)在那里运行。 Bash正在从pts设备读取行并执行命令。 Bash将其stdout / stderr写回pts设备,bash启动的程序也是如此。但是pts本身只是一个美化的串行终端。它显示写入其中的字符,您(bash)可以读取键入其中的字符。通常它也会回显(显示)键入的字符。

当您从另一个终端写入pts设备时,它会显示字符,但无法从pts设备读取这些字符。你(bash)只能从pts读取用户输入的内容。

令人困惑的是,显示写入pts设备的字符(这是你尝试过的)并且回显输入的字符看起来完全一样。