problème d'initialisation du shell lorsque vous cliquez sur l'onglet, quel est le problème avec getcwd?

153

une fois que je clique sur Tab sur bash, le message d'erreur apparaît, qu'est-ce qui ne va pas?

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

parfois, le message d'erreur est:

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

comment résoudre le problème de shell init?

hugemeow
la source

Réponses:

281

Cela se produit généralement lorsque votre répertoire actuel n'existe plus. Très probablement, à partir d'un autre terminal, vous supprimez ce répertoire (à partir d'un script ou autre). Pour se débarrasser de cela, au cas où votre répertoire actuel aurait été recréé entre-temps, juste cddans un autre répertoire (existant), puis en cdarrière; le plus simple serait: cd; cd -.

Costi Ciudatu
la source
2
Je ne pense pas que mon répertoire n'existe pas, personne ne l'a recréé, je suis dans / root ... donc le problème peut-être un peu différent de ce que vous dites ...
hugemeow
1
pouvez-vous vérifier votre variable d'environnement HOME? echo $HOME; si cela indique un emplacement inexistant, ce n'est pas ça.
Costi Ciudatu
1
(J'utilise shell dans tmux) Tab fonctionne bien parfois, mais parfois, lorsque je crée un nouvel onglet avec tmux, appuyez sur Tab, et cette erreur apparaît, je ne sais pas ce qui s'est passé :(
hugemeow
@kevinarpe C'est bon à savoir, merci! J'ai toujours pensé que c'était assez intelligent pour ne rien fairecd .
Costi Ciudatu
2
@kevinarpe, oui, $PWDest garanti par POSIX d'être défini. Voir pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Charles Duffy
61

Changez simplement le répertoire pour un autre et revenez. Probablement celui-là a été supprimé ou déplacé.

Meetai.com
la source
7

Par hasard, cela se produit-il sur un répertoire utilisant OverlayFS (ou un autre type de système de fichiers spécial)?

Je viens d'avoir ce problème où ma version compilée croisée de bash utiliserait une implémentation interne getcwdqui a des problèmes avec OverlayFS. J'ai trouvé des informations à ce sujet ici:

Il semble que cela puisse être attribué à une implémentation interne de getcwd () dans bash. Lorsqu'il est compilé de manière croisée, il ne peut pas vérifier l'utilisation de getcwd () de malloc, il est donc prudent et définit GETCWD_BROKEN et utilise une implémentation interne de getcwd (). Cette implémentation interne ne semble pas fonctionner correctement avec OverlayFS.

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

Vous pouvez configurer et reconstruire bash avec bash_cv_getcwd_malloc=yes(si vous construisez réellement bash et que votre bibliothèque C fait malloc un appel getcwd).

jdknight
la source
J'ai pu corriger mon erreur en effectuant les mises à jour complètes de la bibliothèque
Richard Day
5

Oui, cd; et cd - fonctionnerait. La raison pour laquelle il peut voir est que le répertoire est supprimé de tout autre terminal ou de tout autre programme et le recrée. Ainsi, l'entrée i-node est modifiée afin que le programme ne puisse pas accéder à l'ancienne entrée i-node.

Viraj Kulkarni
la source
J'ai pu le réparer sur ubuntu 14 en faisant les mises à jour complètes de la bibliothèque ici: digitalocean.com/community/tutorials
Richard Day