После недавнего обновления (Ubuntu 12.04 LTS) выполнение TAB в командной строке выполняется медленно. После ввода частичной команды (например evi [TAB]
) или частичного имени файла (например evince somedocu[TAB]
) оболочка, иногда, хотя и не всегда, зависает на несколько секунд.
Лично я предпочел бы менее мощное автозаполнение медленному. Есть ли простое исправление?
Изменить: Дополнительная информация, связанная с комментариями:
PATH довольно стандартный. ~ / bin содержит несколько скриптов bash
$ echo $PATH /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
Количество файлов в рабочем каталоге меньше 100.
- Функция автозаполнения была особенно медленной после необычной активности диска (обновление системы). Таким образом, возможно, что перечитывание / usr / bin и других каталогов вызвало задержку.
bash
autocomplete
январь
источник
источник
Ответы:
Я не знаю, как починить - есть разные вещи, которые могут вызвать задержки. Но я могу предложить несколько советов для расследования.
Можно предположить, что где-то в пути поиска есть каталог (
$PATH
или где-то, где bash ищет данные о завершении), который находится в файловой системе и медленно отвечает. Обычно это медленные удаленные файловые системы, но это также может быть неисправный жесткий диск, зависший драйвер FUSE и т. Д.Первый шаг, который нужно изучить, - запустить
set -x
трассировку команд, которые выполняет оболочка для генерации завершений. Смотрите, где он останавливается.Если это не дает достаточно информации, принесите большие пушки. Обратите внимание на идентификатор процесса оболочки (
echo $$
). Запустите в другом терминалеstrace -f -s9999 -p$$
(или эквивалентно strace, если работаете в другом варианте Unix). Strace перечисляет системные вызовы, выполняемые процессом. Посмотрите, кажется ли, что он обращается к файлам, к которым он не должен, или же доступ к некоторым файлам медленный. Добавление параметра-T
вstrace
командную строку позволяет отображать время, затраченное на каждый системный вызов.источник
set -x
, какая классная команда. Очень "включенный хакерский режим"set +x
чтобы вернуться к обычному режиму без отладкиЕсли ваш * nix box настроен как клиент LDAP, у вас может быть эта проблема, даже если вы вошли как локальный пользователь.
Скучная информация отладки: Отладка с помощью
set-x
, я нашел завершение, которое висело в:Подтверждаю: я это подтвердил тем,
ls ~*
что тоже повесил Оказывается, мой ldap-сервер работал медленно, но это не должно влиять на такие вещи, как завершение bash и ls!Решение: Ага, есть ошибка, связанная с bash-завершением + ldap, она будет исправлена в более новой версии, и простой патч, если вы не хотите ждать. Заполнение вкладок снова быстро, ура!
Вот патч-файл на случай, если ссылка исчезнет. Он просто выходит за пределы строк 545 и 547:
Вам нужно выйти из текущей сессии ssh и повторно войти в систему, чтобы этот патч вступил в силу.
источник
Попробуй переустановить bash-завершение
Для меня это исправлено в Ubuntu 18.04.3 LTS
источник
Также некоторые люди используют дополнительные функции автозаполнения, такие как Git Bash Auto Complete . Замедление завершения bash может быть результатом неправильного поведения этих дополнительных функций автозавершения.
В моем случае это было автоматическое завершение Git bash, мой открытый ключ git был обновлен, поэтому он делал неудачную попытку аутентификации, вызывающую зависание. После того, как я удалил автозаполнение, снова было быстро. Поэтому я решил исправить свой ключ и снова включить его.
источник