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

问题描述 投票:1回答:2

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

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

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

但是在pts / 0中,只打印日期,按Enter键不执行它。所以我猜测comamnd不会转到pts / 0的标准输入。所以我尝试将echo date的输出管道输出到/ dev / pts / 0这给了我许可被拒绝的错误,我成了root并改变了它的权限并且仍然我无法让date命令以pts / 0运行。

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

linux bash shell unix pty
2个回答
2
投票

You can do it by doing this commands, (from /dev/pts/1 or another tty):

exec 1> / dev / pts / 0

to deactivate

exec 1> / dev / pts / 1#或你真正原创的tty地址。

基本上你正在取代tty stdin。

Edited for more details.

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

“1> / dev / pts / 0”在这里我们说,“无论我在这个新的bash上输入什么,都把它写到另一个,并且它确实会这样做,但所有的stdout都会显示在原来的tty上。

祝你好运学习linux,希望你喜欢它。


3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.