일반적인 시나리오:
웹 호스트가 차단하는 파일에 일시적으로 액세스해야 합니다. vim을 시작하고 설정과 배경 vim을 편집하여 아파치에게 구성을 다시 로드하도록 지시했습니다.
질문:
지금 이것을 잊어버린 경우 CTRL+D 세션을 누르면 쉘에 "중지된 작업이 있습니다"라는 메시지가 표시됩니다. 그러나 쉘 안에 쉘을 넣는 습관 때문에 작업을 마치고 ssh, tmux 및 유사한 이유로 창을 닫을 때 반복적으로 EOF가 발생하는 경우도 많습니다. 이로 인해 경고에도 불구하고 실수로 쉘을 죽였습니다.
이 발사체를 죽이는 난이도를 높일 수 있나요?
답변1
를 사용하는 경우 bash
쉘 변수는 IGNOREEOF
EOF를 종료 신호로 간주하기 전에 쉘이 무시해야 하는 연속 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 버퍼는 저장됩니다.