У меня была аналогичная проблема (на Fedora 29, хотя ):мне казалось, что мою /etc/cgconfig.conf
полностью игнорировали. Бег
sudo systemctl enable cgconfig
и перезагрузка решила проблему.
Я предполагаю, что ваша оболочка - Bash. Я могу воспроизвести вашу проблему, переопределив eval
следующим образом:
eval() { echo "$1"; }
или аналогично. Функции завершения используют eval
. Они ожидают, что eval
будетeval
встроенной оболочкой . Если eval
подделаны, они могут вести себя неправильно.
Мои тесты показывают, что eval
как псевдоним или исполняемый файл не нарушает завершение, поэтому, скорее всего, в вашем случае это функция.
Вызов
type eval
Обычно вывод должен быть eval is a shell builtin
. Если вы получите eval is a function
, вызовите
unset -f eval
и проверьте, ведут ли себя дополнения лучше (или хотя бы по-другому ).
Вы должны выяснить, откуда берется функция. Ручной метод заключается в проверке файлов запуска(~/.bashrc
и т.п.)и всего, что из них исходит. Есть лучшие методы. Действуйте следующим образом:
shopt -s extdebug # enable extra debugging info
declare -F eval
Это сообщит вам номер строки и исходный файл. (Наконец, запустите shopt -u extdebug
, чтобы отключить отладку.)
Приведенного выше метода должно быть достаточно, чтобы найти определение функции. На всякий случай,здесь есть несколько других методов:Как найти файл, в котором определена функция bash.
После того, как вы найдете определение этой функции eval
, избавьтесь от нее и пусть eval
будет встроенной функцией. Примечания:
Если завершения не полностью исправлены, проверьте выходные данные declare -F
и проверьте наличие других функций, которые заменяют встроенные (используйте compgen -b
, чтобы знать, что искать ). При необходимости проанализируйте их, как вы только что сделали с eval
, и исправьте аналогичным образом.