TAB当我使用scp.
我的 中有以下行.inputrc:
set completion-ignore-case on
Run Code Online (Sandbox Code Playgroud)
并且不区分大小写的自动完成功能在其他 shell 程序上运行良好。
<TAB>这里的意思是按下TAB按键。
目前,不区分大小写的自动完成功能可以在其他 shell 程序上正常工作,如下所示cp:
$ cp my<TAB>
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,产生:
$ cp MyFile
Run Code Online (Sandbox Code Playgroud)
使用 时scp,不区分大小写的自动完成功能不起作用。在这条线上,什么也没有发生:
$ scp my<TAB>
Run Code Online (Sandbox Code Playgroud)
我必须恢复使用繁琐的区分大小写的自动完成功能,如下所示:
$ scp My<TAB>
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,产生:
$ scp MyFile
Run Code Online (Sandbox Code Playgroud)
由于这是一个“最近”的问题(即这种情况只发生了几年左右),我的猜测是这与某些程序具有自动完成开关和其他参数的方式有关,从某些版本开始bash,但我无法找到如何解决这个特定问题。
Debian(和 Ubuntu)安装为您提供了大量的 shell 完成功能(在软件包中bash-completion);这些函数存储在目录中/etc/bash_completion.d,您感兴趣的函数是/etc/bash_completion.d/ssh.
据我所知,脚本获取可能的完成列表的方式是发出命令ls -aFld ${path}*,其中${path}需要完成的单词在远程计算机上(使用 ssh)或直接在本地计算机上。
为了使其以不区分大小写的方式工作,您需要安排在ls远程系统上执行的命令中的 glob 不区分大小写地扩展,这意味着您需要在执行命令shopt -s nocaseglob之前进行扩展。ls
我认为您的 ubuntu/debian 比我的更新,但以下补丁可能适用于您的系统。否则,您可能可以找出必要的编辑:
--- ssh.old 2013-09-17 16:07:38.000000000 -0500
+++ ssh 2013-09-17 16:06:25.000000000 -0500
@@ -275,3 +275,3 @@
files=$( ssh -o 'Batchmode yes' $userhost \
- command ls -aF1d "$path*" 2>/dev/null | \
+ builtin shopt -s nocaseglob ';' command ls -aF1d "$path*" 2>/dev/null | \
sed -e 's/'$_scp_path_esc'/\\\\\\&/g' -e '/[^\/]$/d' )
@@ -281,3 +281,3 @@
files=$( ssh -o 'Batchmode yes' $userhost \
- command ls -aF1d "$path*" 2>/dev/null | \
+ builtin shopt -s nocaseglob ';' command ls -aF1d "$path*" 2>/dev/null | \
sed -e 's/'$_scp_path_esc'/\\\\\\&/g' -e 's/[*@|=]$//g' \
@@ -303,6 +303,6 @@
if $dirsonly ; then
- COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \
+ COMPREPLY=( "${COMPREPLY[@]}" $( shopt -s nocaseglob; command ls -aF1d $cur* 2>/dev/null | \
sed -e "s/$_scp_path_esc/\\\\&/g" -e '/[^\/]$/d' -e "s/^/$1/") )
else
- COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* 2>/dev/null | \
+ COMPREPLY=( "${COMPREPLY[@]}" $( shopt -s nocaseglob; command ls -aF1d $cur* 2>/dev/null | \
sed -e "s/$_scp_path_esc/\\\\&/g" -e 's/[*@|=]$//g' \
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |