![使用 Linux 自动补全功能和当前目录的单词表和文件](https://linux22.com/image/604365/%E4%BD%BF%E7%94%A8%20Linux%20%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8%E5%8A%9F%E8%83%BD%E5%92%8C%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E7%9A%84%E5%8D%95%E8%AF%8D%E8%A1%A8%E5%92%8C%E6%96%87%E4%BB%B6.png)
我已在我的设置中设置自动完成.bashrc
如下:
complete -W "$(echo `cat ~/.ssh_complete`;)" scp
但这仅使用了文件中给出的单词~/.ssh_complete
。如何扩展定义,以便 tab-completionscp
也使用本地目录中文件的名称。
解决我的问题的一个简单方法是(文件名和单词列表中的单词),我不需要制表符补全来识别实际scp
命令的格式/详细信息。再说一遍:我希望制表符补全显示当前目录中文件的名称并显示文件中给出的条目 ~/.ssh_complete
。
当有新的建议时,我会编辑文件.bashrc
、获取它,然后再次尝试制表符补全scp
。
答案1
如果你写一个如下的函数
function _scp_complete
{
COMPREPLY=""
COMPREPLY+=( $(cat ~/.ssh_complete ) )
COMPREPLY+=( $( ls ) )
}
然后
complete -F _scp_complete scp
-F 完成意味着运行指示的函数(_scp_complete),然后使用数组 COMPREPLY 将每个元素作为一个完成
在函数中我将 COMPREPLY 重置为空白然后我将 ~.ssh_complete (每行成为 COMPREPLY 的一个元素) 添加在 ls 的输出中。
答案2
据记载,你可以将两者结合起来:
complete -o <comp-options> -W "$(cat ~/.ssh_complete)" scp
在哪里<comp-options>
可以指定您想要的行为类型。
我为你摆脱了荒谬的 UUoC 和回声。