"중지된 작업이 있습니다"를 더 어렵게 만들 수 있나요?

"중지된 작업이 있습니다"를 더 어렵게 만들 수 있나요?

일반적인 시나리오:

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

문제:

이제 이 사실을 잊어버리면 세션을 CTRL+D할 때 쉘에서 "작업이 중지되었습니다"라고 알려줄 것입니다. 하지만 ssh, tmux 등으로 인해 쉘에 쉘에 쉘을 두는 습관이 있기 때문에 작업을 마무리하고 창을 닫을 때 EOF를 반복적으로 보내는 경우도 많습니다. 이로 인해 경고에도 불구하고 실수로 쉘을 종료하게 됩니다.

그러한 포탄을 죽이는 것을 더 어렵게 만들 수 있습니까?

답변1

를 사용하는 경우 EOF를 종료 신호로 처리하기 전에 쉘이 무시해야 하는 연속 EOF 문자 수를 지정하는 숫자로 쉘 변수를 bash설정할 수 있습니다 . IGNOREEOF자세한 내용은 매뉴얼 페이지를 확인하세요.

그러나 "작업이 중지되었습니다"라는 메시지가 트리거되기 전에 트리거되므로 여전히 동일한 문제가 발생합니다. 해당 메시지가 표시되고 하나 더 ^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 버퍼는 저장됩니다.

관련 정보