Ksh*_*rma 10 bash autocomplete
我可以理解 bash 自动完成适用于标准实用程序。但是它如何为 Oracle SQL 加载程序等自定义程序自动完成?
在以下命令中,如果您按 Tab 之后,control=
它会自动完成控制文件名:
sqlldr kshitiz/oracle@XE control=data.ctl data=data.csv bad=data.bad log=data.log
Run Code Online (Sandbox Code Playgroud)
它怎么知道它必须在那时填写控制文件而不是其他文件?
Bash 的可编程完成通过解析命令行并确定正在完成的内容来工作:
$
内容作为变量名称完成等。例如,在 之后,bash 完成以. 之后,bash 完成以.开头的变量名。之后,bash 应用命令的完成规则。完成规则可以指定类别(用户、变量、文件等)、文件名的通配符模式或要执行的函数或代码片段。sqllTab
sqll
sqlldr $aTab
a
sqlldr Tab
sqlldr
完成规则由complete
内置程序定义。Bash 不跟踪complete
调用内置函数的时间或它所在的脚本(如果有的话)。大多数发行版都提供bash-completion包,它为常用命令提供了一系列规则。这采用一系列脚本文件的形式,其中包含对 的调用complete
,必须从中读取.bashrc
(或/etc/bash.bashrc
如果实现)一个脚本以加载所有这些脚本:通常. /etc/bash_completion
需要激活可编程完成并加载可用脚本。
标准包不包括对sqlldr
. 如果你有这样的支持,它一定来自不同的来源。此源可能已将文件放入类似目录中,/etc/bash_completion.d
或者可能附带说明以在.bashrc
. 您可以使用complete -p sqlldr
查看当前规则sqlldr
;如前所述,这不会告诉您这些规则是从哪里加载的。
Tcsh、zsh 和 fish 有一些相似的机制(每个人都从 tcsh 中获得灵感),但不同的内置函数、语法和功能。