这可能是比“自定义选项卡完成”更好的名字,但这里的情景:
通常,当我在命令行中,我输入一个命令,然后用{TAB}两次,我得到在当前目录下的所有文件和子目录的列表。 例如:
[user@host tmp]$ cat <TAB><TAB>
chromatron2.exe Fedora-16-i686-Live-Desktop.iso isolate.py
favicon.ico foo.exe James_Gosling_Interview.mp3
不过,我注意到至少一个程序以某种方式过滤该列表: wine
。 考虑:
[user@host tmp]$ wine <TAB><TAB>
chromatron2.exe foo.exe
它有效地过滤结果*.exe
。
想这可能是某种负责过滤包装脚本的,一个做了which
和file
的事实证明wine
是没有剧本的,但一个可执行文件。
现在,我不知道这是否“过滤器”在节目中以某种方式编码本身,或以其他方式默认酒中指定的安装,所以我不知道这个问题是否更适合于计算器或超级用户,所以我穿越我的手指,并在这里把它扔。 我很抱歉,如果我猜错了。 (另外,我查了一些类似的问题,但大多数是不相关或参与编辑外壳配置。)
所以我的问题是,如何在这个“过滤”来实现? 提前致谢。
你可能会发现你的系统,称为上的文件/etc/bash_completion
里面满是功能和complete
的是建立这种行为的命令。 该文件将通过你的shell启动文件中的一个来源,如~/.bashrc
。
也可能有一个目录名为/etc/bash_completion.d
其中包含有更多的功能,完成单个文件。 这些文件由采购/etc/bash_completion
。
这是什么wine
完成指令看起来像从/etc/bash_completion
我的系统上:
complete -f -X '!*.@(exe|EXE|com|COM|scr|SCR|exe.so)' wine
这套文件是由维持很大一部分猛砸完成项目 。
你可以看一看可编程竣工庆典手册中了解它是如何工作的。
我知道这是旧的,但我希望做我自己的脚本类似的东西。
你可以玩弄我在这里做一个例子: http://runnable.com/Uug-FAUPXc4hAADF/autocomplete-for-bash
粘贴代码从上面:
# Create function that will run when a certain phrase is typed in terminal
# and tab key is pressed twice
_math_complete()
{
# fill local variable with a list of completions
local COMPLETES="add sub mult div"
# you can fill this variable however you want. example:
# ./genMathArgs.sh > ./mathArgsList
# local COMPLETES=`cat ./mathArgsList`
# we put the completions into $COMPREPLY using compgen
COMPREPLY=( $(compgen -W "$COMPLETES" -- ${COMP_WORDS[COMP_CWORD]}) )
return 0
}
# get completions for command 'math' from function '_math_complete()'
complete -F _math_complete math
# print instructions
echo ""
echo "To test auto complete do the following:"
echo "Type math then press tab twice."
echo "You will see the list we created in COMPLETES"
echo ""