Bash:Stderrがファイルに転送されます(そうではありません!)。

Bash:Stderrがファイルに転送されます(そうではありません!)。

/etc/bashrc_Apple_Terminal次のコードは、開いているすべてのウィンドウとタブでシェルの状態を保存および復元する方法の一部としてmacOSで動作します(注意してこれは非常に古くなっていますbash 3.2.57(1)-release (arm64-apple-darwin23))。

  if [ -n "$SHELL_SESSION_FILE" ]; then
        echo -ne '\nSaving session...' >&2
        (umask 077; echo 'echo Restored session: "$(/bin/date -r '$(/bin/date +%s)')"' >| "$SHELL_SESSION_FILE")
        declare -F shell_session_save_user_state >/dev/null && shell_session_save_user_state
        shell_session_history_allowed && shell_session_save_history
        echo 'completed.' >&2
    fi

これは最終的にシェルが終了したときに実行されますtrap shell_session_update EXITshell_session_update()この行は順番に別の関数を実行します)。

$SHELL_SESSION_FILE先週、私は非常に奇妙な問題を発見しました。

Saving session...echo Restored session: "$(/bin/date -r 1698759014 Saving session...)"

そしてちょうどRestored session: "$(/bin/date -r 1698759014)"

Saving session...このファイルはstderrに送信されるのではなく(複数回!)書き込まれているようです。

これが複数回発生するという事実は、これらの複数のウィンドウで独自のシェルでこのコードを実行し、場合によってはstderrがこのファイルに誤って送信されるため、これが起こると信じています。

すべての.bash *ファイルと.profileファイルを削除したり、新しいユーザーを作成したりすると動作が表示されないようですが、非常に単純な.bashrcを使用しても再インポートできます。すべてのウィンドウで動作するわけではありませんが、起動するたびにすべてのタブ。 「不確実」に見えます。

私が言ったように、これはちょうど起こり始めました(おそらくSonoma - macOS 14から始まりますが、Python 3.12にアップデートするなどの他の変更が原因で発生する可能性があります)。私はこれがより広範なmacOSのバグではないと思います。他の人がこの行動を見たという証拠を見たことはありません。ファイル記述子間の相互作用に関連していますか? (例:奇妙な競争条件がありますか、それともどのような方法がありますか?外部bashで見たstderrをリダイレクトするプログラムはありますか? )

この問題の原因は何ですか? (それともデバッグ方法についてのアドバイスもありますか?)

修正する:私は新しいユーザーでさえzsh(似ているが同じではないファイルを使う)でも/etc/zshrc_Apple_Terminalこれを見ました。私は非常に奇妙で、私のシステムの「深い」問題を指摘しています(しかし、私にとっては固有の問題でもあり、そうでなければそれについてのより多くの報告を見ることができると思います)。

(望むよりこの「他の質問」の投稿この問題のmacOS関連の症状について学びます。 )

ベストアンサー1

おすすめ記事