BASHが「bash:cd:書き込みエラー:成功」を出力したのはなぜですか?


12

今日は何度か気づきました。入力cd ../Directoryして別のディレクトリに移動すると、「bash:cd:書き込みエラー:成功」と出力されます。他の以前のコマンドがこれに関連している可能性があるのか​​判断できません。

  • typeset -f 何も印刷しません。
  • alias 何も印刷しません。
  • type -a cd 「cd is a shell builtin」と出力します。
  • echo $CDPATH 空の行を出力します。
  • $BASH_VERSION 「bash:4.2.37(1)-release:command not found」と出力します。
  • 私はこれを2〜3回しか気づきませんでした。初期ディレクトリとターゲットディレクトリはどちらの場合も同じでした。この方法でディレクトリを何度も変更しましたが、常にエラーが発生するわけではありませんでした。

これは何が原因ですか?


type -a cdGlennが要求したようにの出力を追加してください。
terdon

typeコマンドの出力を質問に追加してください。また、これはすべてのディレクトリで発生しますか、それとも特定のディレクトリにいる場合にのみ発生しますか?そして、の出力はecho $CDPATH何ですか?
terdon

$BASH_VERSION実行しているbashの正確なバージョン(内)は何ですか?
Gabe 14

私が持っていbash 4.2.37(1)ます。

回答:


6

たぶんバグ?

これは潜在的なバグのようです。同じメッセージを示す同様のレポートを見つけました。バグbash:pwdビルトインが書き込みエラーで終了します:成功

抜粋

このメッセージは、ferror(stdout)がゼロ以外の値を返した場合に表示されます。何らかの理由(おそらくチェックの直前のfflush()呼び出し)で、stdioが原因で、errnoを設定せずにferror()がtrueを返しています。

これは2回続けて起こりますか?組み込みのpwdは、エラーメッセージを出力した後でclearerr()を呼び出します。そのため、stdoutエラーフラグが「スティック」しても、クリアする必要があります。

履歴を更新できませんか?

このエラーにより、ディレクトリの変更は成功したが、にコマンドcd ../Directoryを書き込むことができなかったと思います$HOME/.bash_history。このファイルが変更されておらず、書き込み可能であることを確認します。また、$HOMEディレクトリが書き込み可能であり、満杯ではないことを確認してください。

$ df -h $HOME
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-home  402G  157G  225G  42% /home

/homeパーティションが利用できる多くのスペースを持っています。".bash_history"に不思議な点はありません。所有者のみが読み書きできるように設定されています。端末を終了しても、その端末からのデータはまだそこにあります。同時に複数のターミナルウィンドウを実行していたため、この問題が発生した可能性はありますか?

@Village-おそらく、しかし、コマンドがシェルで実行されるたびに、履歴ファイルにロックを取得し、それが完了すると解放する必要があります。同じことを行う他のすべてのプロセスはただ待機します。
slm

bashは~/.bash_historyコマンドを実行した直後に書き込みを行いませんが、セッションが閉じた後に書き込みますよね?
SOFe 2016年

@Pemapmodder-正解、OPがaskubuntu.com/questions/67283/…のような処理を行ったかどうかは不明でした
slm

私は同じ問題に遭遇し、それが真実ではないことを確信しています(su rootそのときだったので、すぐにtail /root/.bash_history関連するものは何も見られなかったexitため、通常のユーザーに戻り、次にsudo tail /root/.bash_history、行(両方の行、私が繰り返したのでcd)は確かに書かれていました
SOFe

3

cdコマンドはエイリアスか、おそらくbash関数です。

typeset -f  # displays functions
alias       # display aliases

上記のコマンドで見つからない場合which cdは、cdコマンドのパスを見つけます。

探しcd、通常の起動スクリプトでエイリアスや関数定義.bash_profile.bashrcおよび.profile


typeset -falias、およびwhich cdすべてのリターンは何もあり、他のファイルにのみ含まれていませんPATH=~/.context/tex/texmf-linux/bin/:$PATH


1
type -a cd「cd is a shell builtin」と出力します。
村14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.