2015-03-02 70 views
2

我需要以编程方式执行交互式shell(在Node.js中,但任何语言都可以)。 最重要的是,我要开始任何语言的REPL(节点,红宝石,二郎等),能够获得自动完成以编程方式启动交互式shell

pri\t 

,我想在stderr输出(例如)

print()  println()   printf() 

而且因为它在语言REPL compgen不能使用。
我已经尝试了很多方法,但它似乎失败了,因为shell以编程方式打开时不能交互。 Launchin /bin/sh -i只是yeilds一样的错误:

bash: cannot set terminal process group (XXXX): Inappropriate ioctl for device 

我听说过,我不能没有终端开始交互的shell,但这样做SSH自动完成做这些工作的时候,这意味着它可以以某种方式加以效仿。

我会感谢您的帮助。如果没有找到解决方案,我无法继续工作。

回答

6

您可以使用伪终端来模拟终端。这是如何ssh做到这一点。虽然使用伪终端有很多,但SO回答框不够大。因此请查看手册页pty(7)

+0

我可以假设它已预装在每个Linux系统上? – 2015-03-02 16:14:51

+0

@KrzysztofWende根据'forkpty'的手册页,它不是标准的,但它存在于libc5和glibc2中,所以假设它存在于任何最新的linux系统中是安全的。 – randomusername 2015-03-02 16:19:41

+0

是的!最后它起作用。谢谢! 当问题将可用于赏金时,我会给你50个重点。 这是实际工作的第一个答案。 – 2015-03-02 17:04:52