백스페이스에서 "bash read -e"는 printf(기존) 텍스트의 동일한 줄도 삭제합니다.

백스페이스에서 "bash read -e"는 printf(기존) 텍스트의 동일한 줄도 삭제합니다.

나는 사용한다 printf "input: "; read -e. 뭔가를 입력하고 를 누릅니다 Backspace. 마지막 문자에 도달하면 input:해당 문자와 ​​함께 섹션이 제거됩니다. Backspace이전에 아무 것도 입력하지 않았거나 사용하기 쉬운 경우 read(Readline 없음) 오작동은 나타나지 않습니다.

답변1

readin은 bash내장 명령입니다. 라이브러리를 통해 전체 화면 편집을 read -e사용합니다 (예: 이전 줄로 돌아가는 방법, 입력한 텍스트에서 커서를 왼쪽과 오른쪽으로 이동하는 방법 등을 알고 있습니다). 커서 주소 지정 코드를 사용하여 화면 출력을 최적화할 수 있습니다.bashreadline

그러나 입력을 삭제할 때 커서가 줄의 시작 부분에 있을 것으로 예상하고 때로는 전체 줄을 지우는 것이 개별 문자를 삭제하는 것보다 빠릅니다. 이것이 프롬프트를 엉망으로 만들고 커서를 오른쪽으로 이동하지만 bash는 그것을 모릅니다.

프롬프트에서 터미널 이스케이프를 사용할 때(예: 색상 설정 또는 터미널 제목 설정) 동일한 일이 발생합니다. 이를 위해 bash커서를 이동하지 않는 바이트를 나타내는 특수 이스케이프가 있습니다.

이를 위해 특별히 설계된 프롬프트 옵션을 read -p 'input: ' -e사용해야 합니다 .-p

답변2

A는 read -ereadline 라이브러리를 호출합니다. read일반 텍스트에는 없는 여러 편집 도구 에 액세스할 수 있습니다 . 그러나 "빈 줄"이 있다고 가정합니다.

이를 해결하는 방법은 "빈 줄" 가정을 피하기 위해 공백과 같은 것을 제공하는 것입니다.

printf 'input:'; read -e -p ' '

그러나 해당 옵션이 이미 사용되었으므로 다음과 같이 -p작성하는 것이 더 간단할 수 있습니다.

read -e -p 'input: '

관련 정보