Tux*_*ude 4 bash bash-completion
我添加了一个新别名scp_using_rsync,它使用rsync通过SSH复制文件并使用某些选项.我想将scp的bash完成链接到此别名.
当我添加这一行时,它可以工作:
complete -o bashdefault -o default -o nospace -F _scp scp_using_rsync 2>/dev/null || complete -o default -o nospace -F _scp scp_using_rsync
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我注意到,_scp在我的bash环境中定义,只有在我尝试使用ssh/scp在该shell中至少执行一次tab-completion之后.所以,如果我直接scp_using_rsync在新的shell中运行,我会得到_scp未找到的错误.
typeset -F在为ssh或scp命令尝试制表符完成之前和之后,新shell中的输出清楚地表明在第一次尝试制表符完成后定义了以下函数:
$ diff ~/.scratch/file1 ~/.scratch/file2
224a225,227
> declare -f _scp
> declare -f _scp_local_files
> declare -f _scp_remote_files
226a230
> declare -f _sftp
230a235,240
> declare -f _ssh
> declare -f _ssh_ciphers
> declare -f _ssh_macs
> declare -f _ssh_options
> declare -f _ssh_suboption
> declare -f _ssh_suboption_check
Run Code Online (Sandbox Code Playgroud)
这些函数似乎/usr/share/bash-completion/completions/ssh在我的系统中定义.
这些是我的两个相互关联的问题:
scp_using_rsync以类似的方式将bash-completion链接到scp的bash完成?Bash 4.1添加了一个新-D选项complete,compgen并且compopt:
新的complete/compgen/compopt -D选项用于定义"默认"完成: 在命令上调用的完成,没有定义完成.如果此函数返回124,则再次尝试可编程完成,允许用户 通过使默认完成函数在每次调用时安装单独的完成函数来动态构建一组完成.
bash的手册有一个例子:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |