Если все остальное работает, но только некоторые попытки завершения имени файла (автозаполнения) завершаются неудачей, возможно, вам не хватает разрешения на поиск в каталоге, который является компонентом пути.
Предположим, вам нужен список для какого-то другого пользователя .bash_profile
файл. Следующий ls
команда будет работать; потому что sudo
запускает ls
команда с требуемым разрешением.
$ sudo ls -al /home/someone_else/.bash_profile
Однако, если вы попытаетесь использовать завершение имени файла, завершение вкладки ничего не даст.
$ sudo ls -al /home/someone_else/.bash_pr<tab> # does not complete
Это происходит потому, что bash
завершение работает до sudo
вызывается. Команда с таким же успехом могла бы быть:
$ ls -al /home/someone_else/.bash_pr<tab>
Поскольку разрешение на поиск в этом каталоге отсутствует, завершение команды ничего не делает.
Чтобы временно запустить с более широкими разрешениями, вы можете запустить новую оболочку с помощью sudo
.
$ sudo bash
То ls
команда теперь может быть запущена без sudo
предикат, и автозаполнение работает. (Обратите внимание, что приглашение переключается с $
к #
.)
# ls -al /home/someone_else/.bash_pr<tab>
Просто убедитесь, что вы уничтожили снаряд, когда ваша задача будет выполнена; снаряд с такой большой мощностью опасен.
# exit