gpt4 book ai didi

bash 完成 : description text when pressing TAB (sort of heredoc for autocompletion)

转载 作者:行者123 更新时间:2023-12-05 07:03:25 24 4
gpt4 key购买 nike

我为我的脚本创建了一个漂亮的自动完成功能。

不过有一件事:当参数留给用户决定时(例如,第一个参数是新项目的名称),我想显示一小行描述预期的内容.

For example:
$> script [TAB][TAB]
<name of project>
$> script my_new_project

.

当然,我想过这个:

if [ $COMP_CWORD -eq 1 ]; then
local IFS=$'\n'
COMPREPLY+=($(compgen -W "<name of project>"))

问题是我得到了这个:

$> script [TAB][TAB]
$> script <name of project>

也就是说,当我按 TAB 键时,我定义的一个文本会自动添加到命令行。

.

我也试过这个:

local IFS=$':'
COMPREPLY+=($(compgen -W "Help: <domain name associated with the project>"))

但是结果是乱码,还是在命令行里面加了字:

$> script [TAB][TAB]
<domain name associated with the project> Help:
$> script <domain name associated with the project>

.

拜托,你知道是否有一种用于自动完成的heredoc,帮助文本只出现,但没有添加到命令行?

谢谢!

最佳答案

您始终可以在完成脚本中需要的任何地方使用 printf。这是我会做的:

if [ $COMP_CWORD -eq 1 ]; then
printf "\n *** Enter a project name: %s" "${COMP_LINE[@]}"
fi

不过,打印 COMP_LINE 数组对于第一个参数并不是特别有用。如果您有更多参数并想向用户显示他们到目前为止输入的内容,打印 COMP_LINE 可能是实现此目的的方法。

另外,您可能想向用户建议现有的项目名称。在那种情况下:

if [ $COMP_CWORD -eq 1 ]; then
printf "\n *** Enter a project name: %s" "${COMP_LINE[@]}"
list_of_project_names=("project1" "theotherproject" "testproject")
COMPREPLY=($(compgen -W "${list_of_project_names[@]}" -- "$2"))
fi

请注意,在完成脚本中,$2 是当前要完成的单词,$3 是前一个单词,$1 是第一个单词当前命令行中的单词。

对于更长的描述,您可以使用' heredoc ':

if [ $COMP_CWORD -eq 1 ]; then
cat<<EOF
# leave a blank line for formatting

*** You can select a project from suggestions or enter a
*** name for your new project:
EOF
# Use _printf_ for printing the "${COMP_LINE[@]}" because
# the _heredoc_ adds a newline to the end.
printf ">>> %s" "${COMP_LINE[@]}"
list_of_project_names=("project1" "theotherproject" "testproject")
COMPREPLY=($(compgen -W "${list_of_project_names[@]}" -- "$2"))
fi

您还可以使用带-e 选项的read 命令,如这里所建议的https://stackoverflow.com/a/4819945/6474744

对于更复杂的行为,您可能会发现这很有趣 https://brbsix.github.io/2015/11/29/accessing-tab-completion-programmatically-in-bash/

干杯

关于bash 完成 : description text when pressing TAB (sort of heredoc for autocompletion),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63233061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com