Nat*_*hat 3 unix linux bash shell pty
我在 Gnome 桌面管理器 Ubuntu 中打开了两个 pts 终端。
我想要做的是使用终端 /dev/pts/1 使用重定向向终端 /dev/pts/0 写入一些内容,例如:
##in pts/1
echo date > /dev/pts/0
Run Code Online (Sandbox Code Playgroud)
但是在 pts/0 中,仅打印日期并且按 Enter 不会执行它。所以我猜 comamnd 不会进入 pts/0 的标准输入。所以我尝试将输出echo date传输到 /dev/pts/0 这给了我权限被拒绝的错误,我成为了 root 并更改了它的权限,但我仍然无法获得date在 pts/0 中运行的命令。
我正在尝试这些东西用于学习目的。所以我真的很困惑它是如何在这里工作的,以及我应该怎么做才能完成它。
写入终端设备只会在终端上打印输出。如果它将文本塞回输入缓冲区,那么您打印的所有内容都stdout将循环回stdin,因为它们都连接到同一个终端设备。
为了将数据放入伪 tty 的输入缓冲区,您必须写入其主设备。不幸的是,它们在 Linux 的文件系统中没有不同的名称。有一个/dev/ptmx设备,主进程grantpt()用来创建一个与其链接的从属进程,然后再生成将其用作其控制终端的子进程。因此,文件系统中没有任何可以写入的内容将馈入 pty 的输入缓冲区。
小智 2
执行1>/dev/pts/0
exec 1>/dev/pts/1 #或者你实际的原始tty地址。
基本上你正在取代 tty 标准输入。
在这种情况下,“exec”启动一个新的 bash,您可以为其提供一组新的环境变量,通常您无法即时更改这些变量。有关更多详细信息,请执行“man exec”。
“1>/dev/pts/0”在这里我们说的是,“无论我在这个新的 bash 上输入什么,都将其写入另一个 bash,它确实会执行此操作,但所有标准输出都将显示在原始 tty 上。
祝你学习linux好运,希望你喜欢它。