scp 不会像其他命令那样自动完成

scp 不会像其他命令那样自动完成

我正在使用 tcsh。我发现当我执行 scp myTab 时,它不会自动完成到my-file.txt当前目录下,我必须在./其中添加前缀 a 才能完成。这似乎只发生在scp.我尝试了其他命令,似乎工作正常。

我发现这给了我(即当前主机名)scp tab的值$HOSTNAMElocalhost

所以看起来它正在尝试匹配主机名,不知道为什么..

添加回应评论:

 ~/temp/test>ls -al
total 12
drwxr-xr-x 2 liw liw 4096 Jul 21 15:16 .
drwxr-xr-x 9 liw liw 8192 Jul 21 15:15 ..
-rw-r--r-- 1 liw liw    0 Jul 21 15:16 my_file.txt

~>more .cshrc.user 
set prompt="%n@%m %~%#"

set path=($HOME/bin $path)

if (-o $HOME/.aliases) source $HOME/.aliases

set filec
set autolist
set autoexpand
set addsuffix

bindkey ^r i-search-back

~> complete scp
'c%*@*:%`set q=$:-0;set q="$q:s/@/ /";set q="$q:s/:/ /";set q=($q " ");ssh $q[2] -l $q[1] ls -dp $q[3]\*`%' 'c%*:%`set q=$:-0;set q="$q:s/:/ /";set q=($q " ");ssh $q[1] ls -dp $q[2]\*`%' 'c%*@%$hosts%:' 'C@[./$~]*@f@' 'n/*/$hosts/:'

答案1

几乎可以肯定 /etc 中有一个系统范围的 tcsh 配置文件,其中complete定义了一个特殊的命令scp。检查这一点的最简单方法是输入

complete

这将列出所有自定义完成。自定义完成指令有点复杂,但其意图可能是,如果您使用scp至少一个参数,则希望在文件路径中拥有主机名。然后你可以尝试找出那个奥秘或者只是添加

uncomplete scp

~/.tcshrc以手动覆盖方式飞行该命令。

答案2

自动完成将尝试匹配主机文件中的所有条目。我曾经进行过自动完成并获得“sexyladies.com”,并认为我的系统已受到损害,因为我从未访问过该网站。

事实并非如此,我有一个主机文件设置,其中包含大约 20k 个我想要阻止的网站条目。因此,每次我执行自动完成操作时,它都会浏览该列表。

相关内容