为什么我不能从另一个终端写入我的终端设备的标准输入

why can't I write to the standard input of my terminal device from another terminal

我在我的 Gnome 桌面管理器中打开了两个 pts 终端 Ubuntu。

我想做的是使用终端 /dev/pts/1 使用重定向向终端 /dev/pts/0 写入一些内容,例如:

##in pts/1
echo date > /dev/pts/0   

但在pts/0中,只是简单地打印了日期,按回车键并没有执行。所以我猜 comamnd 不会进入 pts/0 的标准输入。所以我尝试将 echo date 的输出传递给 /dev/pts/0 这给了我权限被拒绝的错误,我成为 root 并更改了它的权限,但我仍然无法在 pts/0 中获得 date 命令到 运行。

我正在尝试这些东西用于学习目的。所以我真的很困惑它是如何在这里工作的以及我应该怎么做才能完成它。

写入终端设备只是在终端上打印输出。如果它将文本塞回输入缓冲区,那么您打印到 stdout 的所有内容都会循环回 stdin,因为它们都连接到同一终端设备。

为了将数据放入伪 tty 的输入缓冲区,您必须写入其主设备。不幸的是,它们在 Linux 上的文件系统中没有不同的名称。有一个 /dev/ptmx 设备,主进程使用 grantpt() 创建一个链接到它的从属进程,然后生成使用它作为其控制终端的子进程。因此,文件系统中没有任何您可以写入的内容将馈入 pty 的输入缓冲区。

你可以通过执行这个命令来做到这一点,(来自 /dev/pts/1 或另一个 tty):

执行 1>/dev/pts/0

停用

exec 1>/dev/pts/1 #或者你原来的tty地址。

基本上您正在取代 tty 标准输入。

已编辑以获取更多详细信息。

"exec" 在这种情况下启动一个新的 bash 并且您可以为其提供一组新的环境变量,通常您不能即时更改这些变量。有关更多详细信息,请执行“man exec”。

"1>/dev/pts/0" 我们在这里说,"无论我在这个新 bash 上键入什么,都将它写入另一个,它确实会这样做,但是所有的标准输出将显示在原始 tty。

祝你学习愉快linux,希望你喜欢。