如何告诉“complete”返回默认值?

2024-06-06 03:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用completebash内置函数为python脚本启用任意自动完成。我设置了:

complete -C './script.py --compgen "$@"' ./script.py

这样,每当bash尝试自动完成时,它就会用一个标志--compgen调用我的脚本,告诉我的脚本自动完成。这个很好用。你知道吗

但是,在某些情况下,我希望能够从script.py中回到bash的默认行为。有没有办法告诉complete它应该在不调用我的脚本的情况下重新运行并执行其默认操作?你知道吗

基本上,我希望在引用文件时避免重新实现文件名扩展。你知道吗


Tags: 文件函数py脚本bash标志script情况
2条回答

事实证明,从python脚本输出compgen的回退方法有一个缺点,即它是不可转移的。因此,如果用户尝试完成a/b/c d.txt这样的文件名,命令行将从:

./script.py a/b/c\ d.txt

./script.py a/b/c d.txt

在点击标签后。其他扩张也会破裂。内置的complete确实提供了一个回退,但是:

complete -C './script.py  compgen "$@"' -o default ./script.py
#                                        ^^^^^^^^^^

它的作用是告诉complete首先尝试-C部分,如果该部分返回零匹配项,它将请求default completion,然后执行文件名解析等

我发现,通过将空字符串作为建议返回,甚至可以强制complete不提供任何建议。这会阻止回退运行,但它也不会算作实际的建议来完成,因此它不会考虑空字符串。你知道吗

在Python代码中尝试以下操作:

import os
# if failed:
os.system("bash -c 'compgen -o default'")

相关问题 更多 >