来自 /dev/pty/N 的 hGetLine?

hGetLine from /dev/pty/N?

我正在尝试从伪终端读取。我的最终目标是将 input/output 从伪终端连接到响应式香蕉事件,但现在我只是试图从 Haskell 代码中的伪终端并在 shell.我在 Main.hs 中有以下代码:

import System.Posix.Terminal
import System.Posix.IO

main :: IO ()
main = do
    (master, slave) <- openPseudoTerminal
    getTerminalName slave >>= print
    hSlave <- fdToHandle slave

    hGetContents hSlave >>= print . take 10

当它 运行 时,我看到类似的内容:

"/dev/pts/7"

所以我希望我可以用这样的东西写给它

echo "hellllllllllllllllllllllllllloooo" > /dev/pts/7

在另一个 shell 中。但是当我 运行 Main.hs 时,"/dev/pts/N" 行之后什么也没有打印出来——看起来它只是永​​远阻塞等待输入。我也尝试使用 hGetLinehGetChar 代替 hGetContents,但没有成功。我在这里错过了什么?

您不想从主句柄读取吗?

...
hMaster <- fdToHandle master
hGetContents hMaster >>= print . take 10
...