"정지 작업"을 없애기 더 어렵게 만들 수 있나요?

"정지 작업"을 없애기 더 어렵게 만들 수 있나요?

일반적인 시나리오:

웹 호스트가 차단하는 파일에 일시적으로 액세스해야 합니다. vim을 시작하고 설정과 배경 vim을 편집하여 아파치에게 구성을 다시 로드하도록 지시했습니다.

질문:

지금 이것을 잊어버린 경우 CTRL+D 세션을 누르면 쉘에 "중지된 작업이 있습니다"라는 메시지가 표시됩니다. 그러나 쉘 안에 쉘을 넣는 습관 때문에 작업을 마치고 ssh, tmux 및 유사한 이유로 창을 닫을 때 반복적으로 EOF가 발생하는 경우도 많습니다. 이로 인해 경고에도 불구하고 실수로 쉘을 죽였습니다.

이 발사체를 죽이는 난이도를 높일 수 있나요?

답변1

를 사용하는 경우 bash쉘 변수는 IGNOREEOFEOF를 종료 신호로 간주하기 전에 쉘이 무시해야 하는 연속 EOF 문자 수를 지정하는 숫자로 설정될 수 있습니다. 특정 정보는 매뉴얼 페이지를 확인하십시오.

그러나 "작업이 중지되었습니다"라는 메시지가 표시되기 전에 실행되므로 여전히 동일한 문제가 발생합니다. 해당 메시지가 표시되고 또 다른 ^D가 셸을 종료합니다.

또 다른 접근 방식은 숫자가 0보다 큰 경우 프롬프트에 셸 작업을 넣는 것입니다.

예를 들어, 내 .bashrc에서 발췌한 내용은 다음과 같습니다.

PROMPT_COMMAND=prompt_command
prompt_command() {
    job_count=$(jobs | wc -l)
    if [ $job_count -gt 0 ] ; then
        prompt_job="[$job_count] "
    else
        prompt_job=""
    fi
}
PS1="...\${prompt_job}..."

그 후에 껍질은 다음과 같이 보일 수 있습니다...[1] ...

작업 수가 0보다 크면 작업 수가 프롬프트에 표시됩니다. 이를 통해 뛰어난 작업이 있는지 쉽게 확인할 수 있으며 해당 작업이 아직 실행 중임을 시각적으로 상기시켜 주는 역할을 합니다.

답변2

이전 답변을 바탕으로 나는 이것을 생각해 냈습니다.

PROMPT_COMMAND=protect_bg_jobs

protect_bg_jobs()
{
    if [ "$(jobs)" == "" ]; then
        set +o ignoreeof
    else
        set -o ignoreeof
    fi
}

"작업 중지됨" 메시지는 숨겨지지만 vim 버퍼는 저장됩니다.

관련 정보