-1

假设我有一个终端,其中“tty”的输出是“/dev/pts/2” 从另一个终端,我想向第一个终端发送命令并执行它。使用: echo "ls" > "/dev/pts/2" 只在第一个终端打印 "ls" 有没有办法执行字符串?

4

5 回答 5

2

不; 终端不执行命令。它们只是数据的渠道。

不过,您可以运行一个命令并将其附加到另一个终端,如下所示:

ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2

但是,它的行为您从该终端运行它的行为不同,因为它不会将该设备设置为其控制终端。不过,它相当接近。

于 2011-12-30T08:40:10.577 回答
1

我意识到这已经晚了一年,但我认为有一个更简单的方法。这不行吗?

ls > /dev/pts/2

它适用于我的系统。

于 2013-01-01T20:15:30.107 回答
0

尝试

echo `ls`

注意不同的报价符号。

于 2011-12-30T08:40:56.620 回答
0

通常需要 getty、login 和 shell 程序来执行来自 tty 的命令。

但是你也可以把一个shell直接从一个伪终端执行命令。这是简化的示例(删除了所有错误检查):

int main( int argc, char** argv )
{
    int master_fd = create_my_own_psudo_terminal() ;

    // Wait until someone open the tty
    fd_set fd_rset;
    FD_ZERO( &fd_rset );
    FD_SET( master_fd, &fd_rset );
    select( master_fd + 1, &fd_rset, NULL, NULL, NULL );

    dup2( master_fd, STDIN_FILENO );
    execl("/bin/sh", "sh", 0 );

    return 0;
}

现在您可以执行以下操作:

在第一个终端中启动这个简单的程序。

并从第二个终端发送您的命令:

echo "ls" > /dev/pts/5

您将在第一个终端中列出。

注意:这是非常不安全的,因为没有完成登录。

于 2011-12-30T10:31:07.817 回答
0

您可以执行 /bin/sh > /dev/pts/5 在 pty 中获取 shell,然后执行其他命令。如果您想要真正的 shell 功能,您可以实现一个线程(在 C 程序中,使用 openpty 命令和所有命令)来读取主 pty 并输出其内容。

于 2021-07-21T16:37:53.120 回答