Problem z inicjalizacją powłoki po kliknięciu karty, co jest nie tak z getcwd?

153

kiedy kliknę Tab na bash, pojawi się komunikat o błędzie, co się stało?

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

czasami komunikat o błędzie to:

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

jak rozwiązać problem z inicjowaniem powłoki?

hugemeow
źródło

Odpowiedzi:

280

Zwykle ma to miejsce, gdy twój bieżący katalog już nie istnieje. Najprawdopodobniej z innego terminala usuwasz ten katalog (z poziomu skryptu lub czegokolwiek). Aby się tego pozbyć, na wypadek gdyby twój bieżący katalog został w międzyczasie odtworzony, po prostu cddo innego (istniejącego) katalogu, a następnie z cdpowrotem; najprostsze byłoby: cd; cd -.

Costi Ciudatu
źródło
2
nie sądzę, że mój dir nie istnieje, nikt go nie odtworzył, jestem w / root ... więc problem może być trochę inny niż twoje powiedzenie ...
hugemeow
1
czy możesz sprawdzić zmienną HOME env? echo $HOME; jeśli to wskazuje na nieistniejącą lokalizację, to nie to.
Costi Ciudatu
1
(używam powłoki w tmux) Tab czasami działa dobrze, ale czasami kiedy tworzę nową kartę za pomocą tmux, naciskam Tab i pojawia się ten błąd, nie wiem, co się stało :(
hugemeow
@kevinarpe Dobrze wiedzieć, dzięki! Zawsze myślałem, że to wystarczająco mądre, aby nic nie robićcd .
Costi Ciudatu
2
@kevinarpe, tak, $PWDPOSIX gwarantuje, że zostanie zdefiniowany. Zobacz pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Charles Duffy
61

Po prostu zmień katalog na inny i wróć. Prawdopodobnie ten został usunięty lub przeniesiony.

Meetai.com
źródło
7

Czy przypadkiem ma to miejsce w katalogu używającym OverlayFS (lub innego specjalnego typu systemu plików)?

Właśnie miałem ten problem, w którym moja skompilowana krzyżowo wersja basha getcwdużywałaby wewnętrznej implementacji, która ma problemy z OverlayFS. Znalazłem informacje na ten temat tutaj:

Wygląda na to, że można to przypisać wewnętrznej implementacji getcwd () w bash. Po skompilowaniu krzyżowym nie może sprawdzić, czy getcwd () używa malloc, więc jest ostrożny i ustawia GETCWD_BROKEN i używa wewnętrznej implementacji getcwd (). Wydaje się, że ta wewnętrzna implementacja nie działa dobrze z OverlayFS.

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

Możesz skonfigurować i przebudować bash za pomocą bash_cv_getcwd_malloc=yes(jeśli faktycznie budujesz bash, a twoja biblioteka C robi malloc wywołanie getcwd).

jdknight
źródło
Udało mi się naprawić swój błąd, wykonując pełne aktualizacje biblioteki
Richard Day,
5

Tak, cd; i cd - zadziała. Powodem, dla którego widzi, jest to, że katalog jest usuwany z dowolnego innego terminala lub innego programu i tworzy go ponownie. Tak więc pozycja i-node jest modyfikowana, więc program nie może uzyskać dostępu do starego wpisu i-node.

Viraj Kulkarni
źródło
Udało mi się to naprawić na Ubuntu 14, wykonując pełne aktualizacje biblioteki tutaj: digitalocean.com/community/tutorials/ ...
Richard Day