проблема инициализации оболочки при нажатии на вкладку, что не так с getcwd?

153

как только я нажму Tab на bash, появится сообщение об ошибке, что не так?

symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success

иногда сообщение об ошибке:

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No s uch file or directory

Как решить проблему инициализации оболочки?

hugemeow
источник

Ответы:

281

Это обычно происходит, когда ваш текущий каталог больше не существует. Скорее всего, из другого терминала вы удаляете этот каталог (из скрипта или как угодно). Чтобы избавиться от этого, в случае, если ваш текущий каталог был воссоздан за это время, просто cdв другой (существующий) каталог и затем cdобратно; самое простое будет: cd; cd -.

Кости Сьюдату
источник
2
я не думаю, что мой каталог не существует, не кто-то воссоздал его, я нахожусь в / root ... так что проблема может быть немного другой, как вы говорите ...
greatmeow
1
Вы можете проверить свою переменную HOME env? echo $HOME; если это указывает на несуществующее местоположение, это не так.
Costi Ciudatu
1
(я использую оболочку в tmux). Вкладка работает хорошо несколько раз, но иногда, когда я создаю новую вкладку в tmux, нажимаю Tab, и появляется эта ошибка, я не знаю, что произошло :(
greatmeow
@kevinarpe Это приятно знать, спасибо! Я всегда думал, что это достаточно умно, чтобы ничего не делатьcd .
Кости Сьюдату
2
Да, @kevinarpe $PWDгарантируется POSIX. См. Pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Чарльз Даффи
61

Просто измените каталог на другой и вернитесь. Вероятно, тот был удален или перемещен.

Meetai.com
источник
7

Случайно ли это происходит в каталоге, использующем OverlayFS (или какой-либо другой специальный тип файловой системы)?

У меня просто была эта проблема, когда моя кросс-скомпилированная версия bash использовала бы внутреннюю реализацию, getcwdкоторая имеет проблемы с OverlayFS. Я нашел информацию об этом здесь:

Похоже, это можно проследить до внутренней реализации getcwd () в bash. При кросс-компиляции он не может проверять getcwd () на использование malloc, поэтому он осторожен и устанавливает GETCWD_BROKEN и использует внутреннюю реализацию getcwd (). Эта внутренняя реализация не очень хорошо работает с OverlayFS.

http://permalink.gmane.org/gmane.linux.embedded.yocto.general/25204

Вы можете настроить и перестроить bash с помощью bash_cv_getcwd_malloc=yes(если вы на самом деле собираете bash и ваша библиотека C выполняет malloc вызов getcwd).

jdknight
источник
Я смог исправить свою ошибку, выполнив полные обновления библиотеки
Ричард Дэй
5

Да, компакт-диск; и CD - будет работать. Причина, по которой он видит, заключается в том, что каталог удаляется из любого другого терминала или любой другой программы и воссоздает его. Таким образом, запись i-узла изменена, поэтому программа не может получить доступ к старой записи i-узла.

Вирадж Кулкарни
источник
Я смог исправить это на Ubuntu 14, выполнив полные обновления библиотеки здесь: digitalocean.com/community/tutorials/…
Ричард Дэй