Завершение закладки на SCP с OpenSSH 1:6.2p2-6ubuntu0.1
Вот мой сценарий:
Я хочу перевести ~/foo.txt
на сервер aoneill@bar
,
Я начинаю печатать в моей командной строке:
aoneill@aoneill-Laptop:~$ scp fo
В этот момент я ударил <tab>
чтобы завершить имя файла, и мой терминал просто зависает. Он не изменится в зависимости от нажатия клавиши, а курсор просто застрянет прямо рядом с fo
если я <ctrl-C>
из.
Я использую Ubuntu 13.10, и я включаю . /etc/bash_completion
в моем .bashrc
,
Это единственная программа, с которой я действительно сталкиваюсь с этой проблемой, и она, похоже, не является общей проблемой.
Спасибо за помощь!
2 ответа
В этот момент я нажимаю вкладку, чтобы завершить имя файла, …
... и компьютер, совершенно не в состоянии прочитать ваши мысли, сделал то, что он на самом деле делает, когда в тот момент нажата вкладка, то есть попытка завершить имя хоста, возможно, консультируясь со всеми видами вещей из вывода avahi-browse
на выход ruptime
, Этот процесс может занять некоторое время.
(Храбрый может пойти и посмотреть на _known_hosts_real
функция в /usr/share/bash-completion/bash-completion
.)
Чтобы завершить имя файла в этой точке, слово, которое вы ввели, должно содержать косую черту (/
) или начать с точки (.
) или тильда (~
) персонаж.
(Храбрый может так же понять, почему это из _scp
функция в /usr/share/bash-completion/completions/scp
.)
Я столкнулся с этим с Ubuntu 14.04. Использование set -x показывает, что автозаполнение зависало на ruptime. Когда я попытался запустить ruptime самостоятельно, я обнаружил, что он не установлен. После установки пакета rwho зависание было исправлено.
sudo apt-get установить rwho
COMPREPLY+=($( compgen -W "$( ruptime 2>/dev/null | awk '!/^ruptime:/ { print $1 }' )" -- "$cur" ))
+++ ruptime
+++ awk '!/^ruptime:/ { print $1 }'
Строка COMPREPLY вызывает ruptime без проверки, чтобы увидеть, существует ли она. И так как у меня включено "COMMAND_NOT_FOUND_INSTALL_PROMPT=1", команда пытается спросить меня, хочу ли я установить его, но канал захватывает вывод и зависает.
Таким образом, ошибка может заключаться в том, что COMMAND_NOT_FOUND_INSTALL_PROMPT не проверяет, используется ли он в конвейере. Или что COMPREPLY не проверяет, установлена ли команда первой.
Опубликован баг с группой "команда не найдена". https://bugs.launchpad.net/command-not-found/+bug/1534175