2009-02-07 137 views
1

有什么方法可以在Linux中向bash提示插入命令?我正在研究一个命令历史记录应用程序 - 就像Ctrl + R查找但不同。我为此使用python。将命令插入Bash Shell

我会根据用户的搜索词显示历史命令列表 - 如果用户按下回车键,应用程序将执行该命令并打印结果。到现在为止还挺好。

如果用户选择一个命令,然后按下右键或左键,我想将命令插入提示符 - 以便用户可以在执行命令之前编辑该命令。

如果你在Linux上,只需启动一个bash控制台,按Ctrl + r键入cd(或其他),然后按右箭头键 - 所选命令将显示在提示符处。这是我正在寻找的功能 - 但我想知道如何从Python内做到这一点。

回答

3

你可以做到这一点,但只有当shell作为你的Python程序的子进程运行时;你无法将内容提供给父进程的标准输入。 (如果可以的话,当人们使用比调用shell更少的特权运行进程时,UNIX会产生许多相关的安全问题!)

如果您熟悉Expect如何允许直通到交互子流程(使用特定的键序列从子进程触发的用户或字符串匹配并将控制权发送回您的程序),Python可以通过pexpect完成同样的事情。或者,如另一篇文章中提到的,curses模块可以完全控制终端显示的绘制 - 如果历史菜单在窗口内发生而不是在图形(X11/win32)弹出窗口中,您将需要这些。

3

参见readline模块。它实现了所有这些功能。

3

如果我理解正确,你会喜欢历史行为类似于在python应用程序 bash。如果这是你想要的GNU Readline Library是要走的路。

有一个python包装GNU readline interface但它只在Unix上运行。 readline.py似乎是Windows的一个版本,但我从来没有尝试过。