在反引号内完成Bash完成或使用完整的$()

mni*_*ber 6 bash complete backticks

考虑这个单线程来激活bash完成foobar:

complete -F _known_hosts foobar
Run Code Online (Sandbox Code Playgroud)

这显示了完成选项列表

> foobar <TAB> <TAB>
Run Code Online (Sandbox Code Playgroud)

但不是

> $(foobar <TAB> <TAB>
Run Code Online (Sandbox Code Playgroud)

要么

> `foobar <TAB> <TAB>
Run Code Online (Sandbox Code Playgroud)

我认为对于反引号或$()内的表达式进行制表选项很有意义.我怎样才能做到这一点?

Sam*_*mit 0

如果您只想完成命令,那么您可以执行以下操作:

\n\n

1) 打开文件/usr/share/bash-completion/bash_completion

\n\n

2)转到功能_quote_readline_by_ref

\n\n

3)将该行替换[[ ${!2} == \\$* ]] && eval $2=${!2}[[ ${!2} == \\$\\'* ]] && eval $2=${!2}

\n\n

4) 保存更改并退出。

\n\n

此后,如果您打开一个新选项卡并开始在引号或中键入命令$(),该命令将完成或显示正常情况下发生的可能性。\n请参阅下面的示例:

\n\n
[22:57]\xe2\x9c\x93 -> echo $(ls\nls           lsblk        lscpu        lshw         lsipc        lslogins\nlsof         lspcmcia     lsusb        lsattr \n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您遇到任何问题,请告诉我。

\n