我试图从伪终端读取。我最终的目标是将输入/输出从伪终端连接到reactive-banana事件,但是现在我只是尝试从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"
行之后没有任何内容被打印出来 - 看起来它只是永远等待输入。我还尝试使用hGetLine
和hGetChar
代替hGetContents
,但没有运气。我在这里缺少什么?
答案 0 :(得分:2)
您不想从主句柄中读取吗?
...
hMaster <- fdToHandle master
hGetContents hMaster >>= print . take 10
...