在 bash 中创建 shell 完成功能时,该-C
选项似乎非常强大且通用。它是这样定义的:
-C 命令
命令 在子shell环境中执行,其输出用作可能的完成。
这看起来真的很简单。但是,奇怪的是,事实并非如此。如果我做:
$ complete -C "echo one two three" test.sh
Run Code Online (Sandbox Code Playgroud)
然后输入test.sh
并点击 [tab] 一次,我得到那一行
$ test.sh one two three test.sh test.sh
Run Code Online (Sandbox Code Playgroud)
背部。什么?!为了比较,
$ complete -W "one two three" test.sh
Run Code Online (Sandbox Code Playgroud)
完全符合我的期望:它提供了一个、三个或两个尽可能的完成(当然是按排序顺序)。
我在任何地方都找不到任何好的文档,所以我正在尝试......也许分号有帮助?complete -C "echo one two three;" test.sh
...啊,好吧,这对一些人有帮助,因为它test.sh
从最后消除了奇怪的东西。但它仍然填写完整的 string one two three
。这很奇怪,因为上面的描述肯定是说“可能的完成”,复数。...所以,嗯,啊,换行符?让我们试试complete -C "echo -e 'one\ntwo\nthree';" test.sh
。
好的,所以,这是有希望的。如果我打字test.sh [tab]
,我就会回来one three two
。但接下来,事情就出错了。我添加一个 …