Проблема з ініціалом оболонки при натисканні вкладки, що не так з 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

як вирішити проблему з оболонками init?

Відповіді:


281

Зазвичай це відбувається, коли поточного каталогу вже не існує. Швидше за все, з іншого терміналу ви видалите цей каталог (зсередини сценарію чи будь-якого іншого). Щоб позбутися цього, у випадку, якщо ваш поточний каталог тим часом був відтворений, просто cdв інший (існуючий) каталог, а потім cdназад; найпростіше буде: cd; cd -.


2
я не думаю, що мого режисера не існує, не хтось відтворив його, я в / root ... так що питання може бути дещо іншим, як ваша приказка ...
hugemeow

1
чи можете ви перевірити змінну HOME env? echo $HOME; якщо це вказує на існуюче місце, це не все.
Costi Ciudatu

1
(я використовую оболонку в tmux) Вкладка працює добре, але іноді, коли я створюю нову вкладку з tmux, натисніть Tab, і з’явиться ця помилка, я не знаю, що сталося :(
hugemeow

@kevinarpe Це добре знати, дякую! Я завжди вважав, що це досить розумно, щоб нічого не робитиcd .
Costi Ciudatu

2
@kevinarpe, так, $PWDPOSIX повинен бути визначений. Дивіться pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Чарльз Даффі

61

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


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).


Мені вдалося виправити свою помилку, виконавши повне оновлення бібліотеки
Річард День

5

Так, cd; і cd - працювали б. Причина, яку можна побачити, полягає в тому, що каталог видаляється з будь-якого іншого терміналу або будь-якої іншої програми і відтворює його. Отже, запис i-node модифікований, тому програма не може отримати доступ до старої записи i-node.


Я зміг виправити це на ubuntu 14, зробивши тут повні оновлення бібліотеки: digitalocean.com/community/tutorials/…
Річард День
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.