【问题标题】:Linux redirect input via proc fd0, dev/ptsLinux 通过 proc fd0、dev/pts 重定向输入
【发布时间】:2014-06-27 08:18:13
【问题描述】:

在使用 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 执行命令。

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

提前谢谢你。

【问题讨论】:

    标签: linux shell proc pts


    【解决方案1】:

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

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

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

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

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

    如果您仍需要解决方案:

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

    【讨论】:

      【解决方案2】:

      终端和外壳之间是有区别的。当您看到一个 pts 窗口时,那里同时运行着一个终端仿真器 (pts) 和一个 shell (bash)。 Bash 正在从 pts 设备读取行并执行命令。 Bash 将其 stdout/stderr 写回 pts 设备,由 bash 启动的程序也这样做。但是pts本身只是一个美化的串行终端。它显示写入其中的字符,您(bash)可以读取输入的字符。通常它还会回显(显示)输入的字符。

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-20
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        相关资源
        最近更新 更多