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