Завершение закладки на 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

Другие вопросы по тегам