获取stdin写入的bash自动完成功能

时间:2015-03-02 02:43:59

标签: linux node.js bash autocomplete

我想编写一个打印出bash自动完成功能的程序 基本上我用

写了一些东西进入bash stdin
childProc.stdin.write("./myfi")

并希望获得自动完成功能,例如" ./ myfile.txt"

childProc.stdout之后childProc.stdin.write("\t")为空,因此必须有其他方法来触发自动完成功能。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

仅在交互式shell中启用命令完成。如果出现以下情况,Bash是互动的:

  • 调用bash和
  • 时,既未指定脚本文件名也未指定-c选项
  • stdin和stderr都附加到终端(由isatty()确定)或

  • bash以-i标志开始。

在您的情况下,stdin显然是一个管道,它不是终端。因此可能已禁用命令完成。但如果已启用,则您会在stderr而不是stdout上看到结果。

因此,您可以在启动bash shell时尝试提供-i命令行选项,或者可以将其stdin,stdout和stderr文件描述符附加到伪tty。在任何一种情况下,您将看到从bash返回的内容将与终端控制代码混合在一起,因此您可能希望将TERM设置为基本内容(例如dumb)。

如果您想查看bash可能生成的完成情况,可以使用内置的compgencompgen不知道complete命令安装的自定义完成设置,并且要为-F-C函数正确设置环境并不容易,但除此之外,你可以得到它来生成你想要的任何完成列表。有关详细选项文档,请参阅Bash manual

答案 1 :(得分:0)

我找到了答案 使其发挥作用的是Pseudoterminal 实际上这个模块 https://www.npmjs.com/package/pty.js-dl