假设我有一个终端,其中“tty”的输出是“/ dev / pts / 2” 从另一个终端,我想向第一个终端发送命令并执行它。 使用: echo“ls”> “/ dev / pts / 2”仅在第一个终端中打印“ls” 有没有办法执行字符串?
答案 0 :(得分:2)
没有;终端不执行命令。它们只是数据的渠道。
您可以运行命令并将其附加到这样的另一个终端,但是:
ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2
它不会像你从那个终端那样运行完全,因为它不会将该设备设置为其控制终端。但是,它相当接近。
答案 1 :(得分:1)
我意识到这已经晚了一年,但我认为有一种更简单的方法。这不行吗?
ls > /dev/pts/2
它适用于我的系统。
答案 2 :(得分:0)
尝试
echo `ls`
注意不同的引号。
答案 3 :(得分: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
您将在第一个终端上市。
注意:这是非常不安全的,因为登录没有完成。
答案 4 :(得分:0)
您可以执行 /bin/sh > /dev/pts/5 在 pty 中获取一个 shell,然后执行其他命令。如果你想要一个真正的 shell 功能,你可以实现一个线程(在 C 程序中,使用 openpty 命令和所有)来读取主 pty 并输出其内容。