深入探索Shell补全功能及常用Unix程序
1. 从shell函数中使用vared
当从shell函数而非脚本中使用vared时,情况会更简单。因为shell函数直接在交互式shell中运行,这意味着补全系统可能已经启用。补全系统包含一个钩子,能让你轻松定义vared内的补全内容。使用时,只需将compcontext变量设置为与传递给_arguments相同形式的字符串即可。
例如,一个读取主机名的函数可以这样写:
gethost() { local compcontext='hosts:host:_hosts' vared -c -p 'Enter hostname: ' host }2. 使用不同的补全器
除了Tab键,还可以将补全器的功能绑定到其他键上。常见的候选补全器有_correct、_match和_expand。对于那些不在默认补全器样式列表中、不会被Tab键调用的补全器来说,这种方法特别有用。还有一个_all_matches补全器,将其绑定到某个键上也很实用,它能插入另一个补全器生成的所有可能匹配项。
compinit函数会将Tab键绑定到_main_complete函数,该函数会设置