Завершение закладки на SCP с OpenSSH 1: 6.2p2-6ubuntu0.1

344
AlexO'Neill

Вот мой сценарий:

Я хочу перенести ~/foo.txtна сервер aoneill@bar.

Я начинаю печатать в моей командной строке:

aoneill@aoneill-Laptop:~$ scp fo 

В этот момент я нажимаю, <tab>чтобы завершить имя файла, и мой терминал просто зависает. Он не изменится в зависимости от нажатия клавиши, а курсор просто застрянет прямо рядом с fo, если я не <ctrl-C>выхожу.

Я бегу Ubuntu 13.10, и я включаю . /etc/bash_completionв свой .bashrc.

Это единственная программа, с которой я действительно сталкиваюсь с этой проблемой, и она, похоже, не является общей проблемой.

Спасибо за помощь!

0
Я думаю, что нам нужно больше информации, чтобы понять это. Это происходит с каждым файлом и каждой папкой? Это происходит только с `scp`? У вас есть какие-нибудь настройки в `~ / .bashrc`? В какой конфигурации вы должны искать имена хостов, это DNS? Kevin Panko 10 лет назад 0

2 ответа на вопрос

0
JdeBP

В этот момент я нажал, tabчтобы завершить имя файла,…

... и компьютер, совершенно не умеющий читать ваши мысли, сделал то, что он на самом деле делает, когда tabего ударили в тот момент, то есть пытался завершить имя хоста, возможно, консультируясь со всеми видами вещей от вывода avahi-browseдо вывода ruptime. Этот процесс может занять некоторое время.

(Храбрый может пойти и посмотреть на _known_hosts_realфункцию в /usr/share/bash-completion/bash-completion.)

Чтобы завершить имя файла в этой точке, набранное вами слово должно содержать /символ косой черты ( ) или начинаться с точки ( .) или ~символа тильды ( ).

(Храбрый может так же понять, почему это из _scpфункции в /usr/share/bash-completion/completions/scp.)

Отлично! Спасибо. Я буду помнить об этом, когда буду использовать ssh / scp в будущем! AlexO'Neill 10 лет назад 0
0
jjcf89

I ran into this with Ubuntu 14.04. Using set -x shows that the autocomplete was hanging on ruptime. When I tried to run ruptime myself I found that it wasn't installed. After installing the rwho package the hang was fixed.

sudo apt-get install rwho

COMPREPLY+=($( compgen -W "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )" -- "$cur" )) +++ ruptime +++ awk '!/^ruptime:/ { print $1 }' 

The COMPREPLY line calls ruptime without checked to see if it exists. And since I have 'COMMAND_NOT_FOUND_INSTALL_PROMPT=1' enabled the command tries to ask me if I want to install it but the pipe captures the output and hangs.

So the bug may be that COMMAND_NOT_FOUND_INSTALL_PROMPT doesn't check if its being used in a pipe. Or that COMPREPLY doesn't check if the command is installed first.

Posted bug with command-not-found group. https://bugs.launchpad.net/command-not-found/+bug/1534175

Похожие вопросы