我正在尝试用Java创建终端模拟器.java程序将接受来自用户的命令,并向其显示其输出.我可以模仿像'ls'这样的简单命令,但我不知道如何处理像'cd'这样的命令.这是因为我使用exec()方法执行终端命令.因此,所有命令都在当前目录中执行.执行'cd ..'之类的命令,但是它们没有持久效果,因为每个命令都由exec()单独执行.
任何想法如何模仿整个会话?
如果您正在执行命令exec(),则不是在编写终端仿真器; 你正在写一个shell.在这种情况下,您需要跟踪shell跟踪的内容,例如环境变量和工作目录.
如果你真的想写一个终端模拟器,你将通过伪终端与shell进程交谈.然后你的程序就会跟踪终端跟踪的事情,比如线路状态和屏幕上显示的内容.
使用Java中的伪终端将会有点棘手,因为大多数文档假设您使用的是C api. man pty应该让你开始.您的Java进程必须使用FileStream对象打开伪终端的主端.我不确定在Java中是否有办法让子进程打开伪终端的从属端; 您可能必须调用一个shell命令exec(),启动另一个shell命令,标准输入/输出/错误重定向到伪终端的从属端.