Когда я набираю несуществующую команду, появляется сообщение «Команда не найдена». а затем ждет около 5 секунд, прежде чем снова отобразить подсказку.
Как мне это исправить?
Я использую Fedora.
Убедитесь, что ваш путь не включает сетевой ресурс «монтирование по требованию». Кроме того, мой Ubuntu установил что-то, что, если вы наберете имя существующей команды, но еще не установили ее, скажет что-то вроде «вам нужно установить пакет foo». Я не помню, что это делало, но, очевидно, пришлось бы провести какой-то поиск по всей базе данных пакетов, что могло бы занять много времени.
Если вы используете bash, введите "set" и найдите функцию с именем "command_not_found_handle ()". Вот что запускает bash, когда не находит команду.
Похоже, у вас установлен пакет PackageKit-command-not-found. Когда он установлен, если вы набираете команду, которой не существует, он сообщает вам «команда не найдена», а затем выполняет поиск в ваших репозиториях пакетов, чтобы определить, есть ли доступный пакет, содержащий введенную вами команду. Если он найдет пакет, он предложит вам загрузить его, в противном случае он вернет вас в командную строку.
Если вам не нужна эта функциональность, вы можете удалить пакет PackageKit-command-not-found, выполнив sudo yum remove PackageKit-command-not-found
Я думаю, что идея Пола об автоматическом монтировании сетевого ресурса на вашем пути, вероятно, там, где она зависает. Самый простой способ увидеть, где он завис, - это посмотреть, на каком системном вызове завис процесс. strace
это инструмент для отслеживания системных вызовов, например:
`strace bash -c 'non_existent_command'`
....
stat64("/mnt/remotebin", 0xbfad11e0) = -1 ENOENT (No such file or directory) #Hangs here Maybe?
...
Если он висит на автоматическом монтировании чего-то в пути, вы можете отфильтровать вывод с помощью:
strace -e trace=stat64 bash -c 'non_existent_command'
Но я думаю, что лучше всего начать с того, который показывает все системные вызовы.