首页 > 解决方案 > 如何在 bash 中获取选项卡自动完成以替换扩展的 $(command)?

问题描述

我有一个小的 bash 脚本get_path,它接受一个参数并返回一个预定路径到标准输出。例如,我可以使用它通过以下方式将文件复制到“project1”目录:

$ cp file1 $(get_path project1)

在上面的示例$(get_path project1)中扩展为类似/path/to/project1/. 要将文件复制到/path/to/project1/dir1/我希望能够使用自动完成功能并执行以下操作:

$ cp file1 $(get_path project1)/d<tab_key>

当我尝试这个时,bash 自动完成它:

$ cp file1 $(get_path /path/to/project1/dir1/

即,$(get_path不更换零件。我该如何解决?

标签: bashautocomplete

解决方案


您可以shell-expand-line readline为此使用命令,通常绑定到Esc,Ctrl-e

$ bind -P | grep shell-expand-line
shell-expand-line can be found on "\e\C-e".

例如,键入echo "$(echo foo)",按下并释放Esc后跟Ctrl-e,命令替换为echo foo


推荐阅读