Pourquoi BASH a-t-il imprimé «bash: cd: erreur d'écriture: succès»?

12

Je l'ai remarqué plusieurs fois aujourd'hui. Si je tape cd ../Directorypour passer à un autre répertoire, il affiche "bash: cd: erreur d'écriture: succès". Je ne peux pas déterminer quelles autres commandes précédentes pourraient être liées à cela.

  • typeset -f n'imprime rien.
  • alias n'imprime rien.
  • type -a cd affiche "cd est un shell intégré".
  • echo $CDPATH imprime une ligne vide.
  • $BASH_VERSION affiche "bash: 4.2.37 (1) -release: commande introuvable".
  • Je ne l'ai remarqué que 2-3 fois. Le répertoire initial et le répertoire cible étaient identiques dans les deux situations. J'ai changé de répertoire de cette manière plusieurs fois, mais je n'ai pas toujours rencontré l'erreur.

Qu'est-ce qui peut causer cela?

Village
la source
Veuillez ajouter la sortie de type -a cdcomme l'a demandé Glenn.
terdon
Veuillez ajouter la sortie de la typecommande à votre question. En outre, cela se produit-il dans tous les répertoires ou uniquement si vous êtes dans un ou des répertoires spécifiques? Et quelle est la sortie de echo $CDPATH?
terdon
Quelle version bash exacte (en $BASH_VERSION) utilisez-vous?
Gabe
Je l'ai bash 4.2.37(1).
Village

Réponses:

6

Peut-être un bug?

Cela ressemble à un bug potentiel. J'ai trouvé un rapport similaire montrant le même message. Le bug bash: pwd se termine avec une erreur d'écriture: succès .

extrait

Ce message sera affiché si ferror (stdout) retourne non nul. Pour une raison quelconque (probablement l'appel fflush () précédant immédiatement la vérification), stdio fait que ferror () renvoie true sans définir errno.

Cela se produit-il deux fois de suite? La commande intégrée pwd appelle clearerr () après avoir imprimé le message d'erreur, donc même si le drapeau d'erreur stdout `colle ', cela devrait l'effacer.

Impossible de mettre à jour l'historique?

L'erreur me fait penser qu'elle a réussi à changer de répertoire, mais n'a pas pu écrire la commande cd ../Directorydans votre $HOME/.bash_history. Je confirme que ce fichier est intact et accessible en écriture. Vérifiez également que votre $HOMErépertoire est accessible en écriture et n'est pas plein.

$ df -h $HOME
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-home  402G  157G  225G  42% /home
slm
la source
La /homepartition a beaucoup d'espace disponible. Je ne trouve rien d'étrange dans ".bash_history", il est configuré pour lire et écrire uniquement pour le propriétaire. Chaque fois que je quitte un terminal, les données de ce terminal y vont toujours. Est-il possible que cela se produise parce que j'exécutais plusieurs fenêtres de terminal en même temps?
Village du
@Village - peut-être, mais chaque fois qu'une commande est exécutée dans un shell, elle devrait obtenir un verrou sur le fichier d'historique et être libérée lorsqu'elle est terminée, tous les autres processus faisant de même devraient simplement attendre.
slm
bash n'écrit pas ~/.bash_historyimmédiatement après l'exécution de la commande, mais après la fermeture de la session, non?
SOFe
@Pemapmodder - correct, il n'était pas clair pour moi si l'OP avait fait quelque chose comme ceci: askubuntu.com/questions/67283/… .
slm
J'ai rencontré le même problème, et je suis sûr que ce n'est pas vrai (parce que j'étais su rootà ce moment-là, et je n'ai instantanément tail /root/.bash_historyrien vu de pertinent, puis exitde revenir à mon utilisateur normal, puis sudo tail /root/.bash_history, et la ligne (les deux lignes, depuis que j'ai répété le cd) était bien écrit.
SOFe
3

Votre commande cd est soit un alias, soit une fonction bash.

typeset -f  # displays functions
alias       # display aliases

S'il n'est pas trouvé avec les commandes ci-dessus which cd, le chemin de la commande sera localisé cd.

Recherchez l' cdalias ou la définition de fonction dans les scripts de démarrage normaux .bash_profile, .bashrcet .profile.

suspect
la source
typeset -f,, aliaset which cdtous ne renvoient rien, et les autres fichiers ne contiennent que PATH=~/.context/tex/texmf-linux/bin/:$PATH.
Village du
2
utilisationtype -a cd
glenn jackman
1
type -a cdaffiche "cd est un shell intégré".
Village du