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 EXIT( shell_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 관련 증상에 대해 알아봅니다. )

관련 정보