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

时间:2018-08-31 06:41:09

标签: linux bash shell unix pty

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

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

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

但是在pts / 0中,仅打印日期,而按Enter则不执行。因此,我猜想该命令不会进入pts / 0的标准输入。因此,我尝试将echo date的输出传递到/ dev / pts / 0,这给了我拒绝权限的错误,我成为root并更改了权限它,但仍然无法让date命令在pts / 0中运行。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

您可以通过执行以下命令来做到这一点(从/ dev / pts / 1或其他tty):

exec 1> / dev / pts / 0

停用

exec 1> / dev / pts / 1#或您实际的原始tty地址。

基本上,您正在取代tty stdin。

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

在这种情况下,“ exec”启动一个新的bash,您可以使用一组通常无法即时更改的环境变量来提供新的bash。有关更多详细信息,请执行“ man exec”。

“ 1> / dev / pts / 0”在这里我们说,“无论我在这个新bash上键入什么,将其写到另一个bash上,的确可以做到,但是所有的stdout都将显示在原始的tty。

祝您学习Linux顺利,希望您喜欢它。