bash-completion – 在第一次调用命令时定义的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 唯一的问题是我注意到,_scp在我的bash环境中定义,只有在我尝试使用ssh / scp在该shell中至少执行一次tab-completion之后.所以,如果我在新shell中直接运行scp_using_rsync,我会得到_scp not found错误. 在为ssh或scp命令尝试制表符完成之前和之后,新shell中的typeset -F输出清楚地表明在第一次尝试制表符完成后定义了以下函数: $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 这些函数似乎在我的系统中的/usr/share / bash-completion / completions / ssh中定义. 这些是我的两个相互关联的问题: > bash如何确定自动获取定义的位置,并在首次尝试完成时定义它们?
Bash 4.1为complete,compgen和compopt添加了一个新的-D选项:
bash的手册有一个例子: _completion_loader() { . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 } complete -D -F _completion_loader (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |