Bash 기능으로 인해 MC 시작 시간이 길어짐

Bash 기능으로 인해 MC 시작 시간이 길어짐

bash명령 뒤에 개행을 보장하는 다음 함수가 있습니다 .

user at terra in ~
$ echo "m"
m
user at terra in ~
$ echo -n "m"
m↵

함수 자체는 다음과 같습니다 .bashrc.

function prompt_command {
    # get cursor position and add new line if we're not in first column
    echo -en "\033[6n" && read -sdR CURPOS
    [[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$prompt_reset"
}
PROMPT_COMMAND=prompt_command

제가 PROMPT_COMMAND설정하면 MC는 10~30초 정도 시작하는데, 댓글을 달면 거의 바로 시작됩니다.

왜 이런 일이 발생합니까? 이 문제를 비활성화하지 않고 어떻게 해결할 수 있나요?

strace, 좀 더 잘 살펴보세요 13:59:06. 9초 지연이 있습니다... (정상)strace비교하려고)

답변1

내가 이해한 바로는 표준 입력의 입력을 기다리고 있습니다.

`3021  13:58:57 read(0,  <unfinished ...>
3019  13:59:06 <... select resumed> )   = 0 (Timeout)`

그것이 무엇을 하고 있는지 찾아야 합니다. 하지만 내 추측은 다음과 같습니다.

read -sdR CURPOS

read문제를 해결하거나 시간 초과를 변경하기 위해 이를 제거할 수 있습니다.

답변2

MC는 터미널에서 bash를 실행합니다. MC가 실행 중인 터미널과 동일한 값으로 설정 되지만 TERM하위 쉘과 터미널 간의 일부 교환을 버퍼링하거나 필터링하는 것으로 보입니다.

Bash가 MC의 직계 하위 프로세스로 실행될 때 다른 사용자 정의를 사용하고 싶을 수도 있습니다. MC의 조잡한 쉘은 프롬프트 줄만 표시하므로 커서 위치에 대해 걱정할 필요가 없습니다. 체계적으로 줄 바꿈만 추가하면 됩니다.

if [[ "$(ps -o comm= -p $PPID)" == "mc" ]]; then
  PS1=$'\n'$PS1
else
  function prompt_command {
    # get cursor position and add new line if we're not in first column
    echo -en "\033[6n" && read -sdR CURPOS
    [[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$prompt_reset"
  }
  PROMPT_COMMAND=prompt_command
fi

관련 정보