^C 문자는 개행 bash 명령 편집의 시작 부분에 있습니다.

^C 문자는 개행 bash 명령 편집의 시작 부분에 있습니다.

나는 bash.모두다음 진술은 정확합니다 ...

  1. 내 (한 줄) 프롬프트가 특히 깁니다.
  2. 터미널 창이 상대적으로 좁습니다.
  3. Ctrl+C를 눌러 이전 프로세스를 종료하면 해당 프로세스 ^C가 줄 왼쪽에 나타납니다.
  4. 편집 중인 명령이 다음 줄로 넘어갑니다.

...그런데 편집자가 엉망이 됐어요. 결국 편집 중이라고 생각했던 문자에서 2자리 오프셋된 문자를 교체하게 되었습니다.

4단계에서 여러 줄에 걸쳐 명령을 입력하는 경우(위쪽 화살표 키를 누르는 대신) 유사한 상황이 발생합니다. 이전 줄로 돌아가서 프롬프트에서 두 문자를 삭제할 수 있습니다.

기본적으로 다음과 같습니다.

(Some output)
^Cuser@host:~/path/to/somewhere $ some long command
that wraps

^C줄의 시작 부분에 나타나서 끊어집니다.

다른 명령(예: sleep 30) 을 시도했는데 ^C한 줄에만 나타나고 프롬프트는 다음 줄에 나타납니다. 이 문제는 다음에서만 발생하는 것 같습니다.node.js: node some_command_that_wraps.js.

중요한 경우에는 밝은 색상의 git 통합 버전이 있습니다 PROMPT_COMMAND. 다음에서 찾을 수 있습니다.깃허브, 만일 내가 어리석은 짓을 했을 경우를 대비해.

고쳐 쓰다

예를 들어 내 PS1은 다음과 같이 설정됩니다(약간 포장했습니다).

\[\e]0;\u@\h:\w\a\]
\[\e[0;93m\]\u@\h\[\e[0;96m\]:\w 
\[\e[0;97m\]{\[\e[0;94m\]master\[\e[0;92m\]\[\e[0;91m\] ~1\[\e[0;97m\]}
\[\e[0m\]\[\e[0;96m\]\$\[\e[0m\]

...표시(더 많은 색상):

roger@roger-p5q:~/Source/rlipscombe/bash_profile [master ~1] $ 

내가 아는 한, 셀 수 없는 문자의 경우 이스케이프 문자가 맞습니다( \[.. 사용 \]).

내가 어떻게 할:

  • ^Cbash가 감지하여 다음 줄로 이동하도록 하시겠습니까 ? 또는
  • 명령 편집이 엉망이 되지 않을까요?

답변1

계속 작업할 수 있는 솔루션을 원하는 경우에는 Enter 키를 한두 번만 누르면 깔끔한 프롬프트가 표시됩니다.

이전 출력에서 ​​"이상한" 문자가 엉망으로 나온 경우 재설정 명령을 실행할 수도 있습니다.

정말로 궁금하고 근본 원인을 찾아야 한다면, 유감스럽게도 나는 readline의 이러한 특별한 복잡성을 전혀 파악하지 못했습니다...

관련 정보