Dlaczego BASH wydrukował „bash: cd: błąd zapisu: sukces”?

12

Zauważyłem to dziś kilka razy. Jeśli piszę, cd ../Directoryaby przejść do innego katalogu, wyświetla „bash: cd: błąd zapisu: sukces”. Nie mogę ustalić, jakie inne poprzednie polecenia mogą być z tym związane.

  • typeset -f nic nie drukuje.
  • alias nic nie drukuje.
  • type -a cd wypisuje „cd jest wbudowaną powłoką”.
  • echo $CDPATH wypisuje pustą linię.
  • $BASH_VERSION wypisuje "bash: 4.2.37 (1) -release: polecenie nie znaleziono".
  • Zauważyłem to tylko 2-3 razy. Katalog początkowy i katalog docelowy były identyczne w obu sytuacjach. Zmieniałem katalogi w ten sposób wiele razy, ale nie zawsze napotykałem błąd.

Co może być tego przyczyną?

Wioska
źródło
Dodaj wynik type -a cdzgodnie z żądaniem Glenna.
terdon
Dodaj wynik typepolecenia do swojego pytania. Czy dzieje się tak również we wszystkich katalogach, czy tylko w określonych katalogach? A jaka jest wydajność echo $CDPATH?
terdon
Jaką dokładnie wersję bash (in $BASH_VERSION) używasz?
Gabe
Mam bash 4.2.37(1).
Wioska

Odpowiedzi:

6

Może błąd?

To brzmi jak potencjalny błąd. Znalazłem podobny raport pokazujący tę samą wiadomość. Bug bash: wbudowane pwd kończy się z błędem zapisu: Sukces .

fragment

Ten komunikat zostanie wyświetlony, jeśli ferror (standardowe wyjście) zwraca wartość niezerową. Z jakiegoś powodu (prawdopodobnie wywołanie fflush () bezpośrednio poprzedzające sprawdzenie), stdio powoduje, że ferror () zwraca true bez ustawiania errno.

Czy zdarza się to dwa razy z rzędu? Wbudowane narzędzie pwd wywołuje funkcję clearerr () po wydrukowaniu komunikatu o błędzie, więc nawet jeśli flaga błędu standardowego `` utknie '', powinno to zostać usunięte.

Nie możesz zaktualizować historii?

Błąd sprawia, że ​​myślę, że udało się zmienić katalogi, ale nie był w stanie napisać polecenia cd ../Directorydo twojego $HOME/.bash_history. Potwierdziłbym, że ten plik jest nienaruszony i można go zapisać. Potwierdź także, że twój $HOMEkatalog jest zapisywalny i nie jest pełny.

$ df -h $HOME
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-home  402G  157G  225G  42% /home
slm
źródło
/homePartycja ma dużo miejsca. Nie mogę znaleźć niczego dziwnego w „.bash_history”, jest ustawiony do odczytu i zapisu tylko dla właściciela. Ilekroć opuszczam terminal, dane z tego terminala nadal tam są. Czy jest to możliwe, ponieważ uruchomiłem wiele okien terminali w tym samym czasie?
Wioska
@Village - być może, ale za każdym razem, gdy polecenie jest uruchamiane w powłoce, powinno uzyskać blokadę pliku historii i zwolnić, gdy zostanie wykonane, każdy inny proces robiąc to samo po prostu poczeka.
slm
bash nie pisze ~/.bash_historybezpośrednio po uruchomieniu polecenia, ale po zakończeniu sesji, prawda?
SOFe,
@Pemapmodder - zgadza się, nie było dla mnie jasne, czy OP zrobił coś takiego: askubuntu.com/questions/67283/… .
slm
Napotkałem ten sam problem i jestem całkiem pewien, że to nieprawda (ponieważ byłem su rootw tym czasie i natychmiast tail /root/.bash_historynie zauważyłem nic istotnego, a potem exitwracam do mojego normalnego użytkownika sudo tail /root/.bash_historyi linii (obie linie, odkąd powtórzyłem cd), rzeczywiście został napisany
SOFe,
3

Twoje polecenie cd jest aliasem lub najprawdopodobniej funkcją bash.

typeset -f  # displays functions
alias       # display aliases

Jeśli nie zostanie znaleziony przy użyciu powyższych poleceń which cd, zlokalizuje ścieżkę cdpolecenia.

Spójrz na cdalias lub definicji funkcji w normalnym skryptów startowych .bash_profile, .bashrca .profile.

podejrzenie
źródło
typeset -f, aliasi which cdwszystkie nic nie zwracają, a inne pliki zawierają tylko PATH=~/.context/tex/texmf-linux/bin/:$PATH.
Wioska
2
usetype -a cd
glenn jackman
1
type -a cdwypisuje „cd jest wbudowaną powłoką”.
Wioska