WBa*_*ang 6 bash alias auto-completion 14.04
我在 12.04 机器上使用了一堆别名。
例子:
alias pssh="tsocks ssh"
alias pscp="tsocks scp"
alias prdp="tsocks xfreerdp ..........SOMETHING ...."
Run Code Online (Sandbox Code Playgroud)
这些别名是对常规 linux 命令(scp、ssh 等)的修改,因此我希望这些别名具有与其原始对应项相同的自动完成规则。我不想编写自己的规则,因为常规命令的规则非常好。
在 12.04 中,以下内容完美运行:
complete -F _ssh pssh
complete -F _scp pscp
complete -F _ssh prdp
Run Code Online (Sandbox Code Playgroud)
这在 14.04 中不起作用。如果我尝试自动完成,我会收到以下错误:
bash: completion: function `_ssh' not found
Run Code Online (Sandbox Code Playgroud)
如果我在尝试 pssh 之前在 ssh 上自动完成,一切正常。据我所知,这是因为自动完成规则在使用之前没有加载。在加载 ssh 的自动完成规则之前,我的规则无效并导致错误。
如何解决此问题,如何正确地将别名挂接到为常规 linux 命令定义的自动完成规则中?
较新的 bash 完成版本 (>=2.0) 极大地缩短了加载自动完成逻辑所用的时间。他们通过根据请求加载所需的文件来制作它们,这些文件的新位置是:
/usr/share/bash-completion/completions/
如果你使用ls -lah来探索这样的目录,你会发现存在很多软链接。这是因为每个命令/别名都需要一个文件,因此,如果您有 pssh、pscp 和 prdp,则需要使用这些名称创建链接:
sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/psss
sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/pscp
sudo ln -s /usr/share/bash-completion/completions/ssh /usr/share/bash-completion/completions/prdp
Run Code Online (Sandbox Code Playgroud)
另一种选择是将 ssh 自动完成文件系统链接到 /etc/bash_completion.d/
sudo ln -s /usr/share/bash-completion/completions/ssh /etc/bash_completion.d/ssh
Run Code Online (Sandbox Code Playgroud)
前一种方法将在每个 bash 交互式会话上加载 _ssh 函数(使启动速度变慢)。
使用上述任何方法后,您的complete -F _ssh pssh ...配置会将 _ssh 函数与您的别名相关联。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |