我想编写一个打印出bash自动完成功能的程序 基本上我用
写了一些东西进入bash stdinchildProc.stdin.write("./myfi")
并希望获得自动完成功能,例如" ./ myfile.txt"
但childProc.stdout
之后childProc.stdin.write("\t")
为空,因此必须有其他方法来触发自动完成功能。
有什么想法吗?
答案 0 :(得分:2)
仅在交互式shell中启用命令完成。如果出现以下情况,Bash是互动的:
-c
选项
stdin和stderr都附加到终端(由isatty()
确定)或
bash以-i
标志开始。
在您的情况下,stdin
显然是一个管道,它不是终端。因此可能已禁用命令完成。但如果已启用,则您会在stderr
而不是stdout
上看到结果。
因此,您可以在启动bash shell时尝试提供-i
命令行选项,或者可以将其stdin,stdout和stderr文件描述符附加到伪tty。在任何一种情况下,您将看到从bash返回的内容将与终端控制代码混合在一起,因此您可能希望将TERM
设置为基本内容(例如dumb
)。
如果您想查看bash
可能生成的完成情况,可以使用内置的compgen
。 compgen
不知道complete
命令安装的自定义完成设置,并且要为-F
和-C
函数正确设置环境并不容易,但除此之外,你可以得到它来生成你想要的任何完成列表。有关详细选项文档,请参阅Bash manual。
答案 1 :(得分:0)
我找到了答案 使其发挥作用的是Pseudoterminal 实际上这个模块 https://www.npmjs.com/package/pty.js-dl