dotnet 핵심 웹 애플리케이션을 실행한 후 sqlite3 기록이 작동하지 않는 이유는 무엇입니까?

dotnet 핵심 웹 애플리케이션을 실행한 후 sqlite3 기록이 작동하지 않는 이유는 무엇입니까?

지난 1~2년 동안 저는 웹 개발 프로젝트에 sqlite3을 자주 사용했습니다. 저는 항상 갑자기 명령 기록이 더 이상 작동하지 않는 문제를 발견했습니다. (위쪽 화살표를 누르면 bash에서와 같이 명령 기록이 표시됩니다.)

참고로

Ubuntu 22.04.3 LTS(6.5.0-21-generic) 및 .NET Core 8.0.200을 실행하고 있습니다.

내가 시도한 것

나는 이것을 이해할 수 없다.

  • 파일을 확인해 ~/.sqlite_history보니 정상적으로 보입니다.
  • env 변수를 확인했지만 $SQLITE_HISTORY이것이 없고 여전히 작동합니다(자세한 내용은 아래 참조).
  • sqlite3 최신 버전으로 업데이트 (3.45.1 2024-01-30)
  • 이와 관련된 많은 질문을 조사했지만 역사가 갑자기 작동하지 않는 이유를 여전히 알 수 없습니다.

편집 - 콘솔 응용 프로그램을 사용해 보았지만 문제가 발생했습니다.

  1. 새 터미널 열기
  2. sqlite3 데이터베이스를 열고 기록 명령을 테스트하십시오. 작동합니다.
  3. sqlite3을 종료하고 명령줄(동일 터미널)로 돌아갑니다.
  4. 콘솔에 "Hello, World"를 인쇄하고 종료하는 .NET Core 콘솔 애플리케이션을 실행합니다. (dotnet run으로 시작)
  5. 2단계와 동일한 sqlite3 데이터베이스를 엽니다. 역사를 시도해 보세요. 이 터미널 창에서는 기록이 더 이상 유효하지 않습니다.

드디어 문제의 원인을 찾았습니다

마침내 sqlite3 기록이 작동하지 않는 이유를 알아냈습니다.

그러나 이것이 왜 문제를 일으키는지 이해할 수 없습니다.

문제를 재현하려면 다음을 수행해야 합니다.

  1. dotnet 핵심 웹 애플리케이션 시작의 예: ( $ dotnet run --project myWebApi)
  2. webapi 중지(CTRL-C)
  3. 내 데이터베이스를 확인하기 위해 sqlite3을 시작했습니다. 현재 시점에는 기록이 없습니다. (화살표를 위로 밀면 결과가 없습니다.)

문제에 대한 단서

새 터미널을 열고 sqlite3을 실행하면 기록이 다시 표시됩니다.

dotnet 핵심 애플리케이션이 저처럼 실행되고 있는데 거기에서 이상한 일이 벌어지고 있다고 생각하지 않지만 잘 모르겠습니다.

왜 이런 일이 일어나는지 아십니까?

답변1

터미널에는 여러 가지 화살표 키 시퀀스 세트가 있습니다. 일반적으로 Up시퀀스를 입력하는데 ESC [ A, 동일한 키를 입력하는 "Apply Key" 모드가 있습니다 ESC O A.

어떤 이유로 Wine과 dotnet은 모두 "콘솔" 추상화 계층의 예상치 못한 부분으로 이 모드를 활성화한 다음 종료 시 비활성화하는 것을 잊어버리는 경향이 있습니다.

(일반적으로 이 모드는 (비)활성화되어야 tput smkx합니다 tput rmkx.)

내가 올바르게 기억한다면 후자의 키 시퀀스는 "애플리케이션 모드에서 위쪽 화살표"가 아닙니다. "Ctrl-Arrow Up" 또는 이와 유사한 시퀀스를 사용하는 다른 터미널이 있습니다. 그러니 어떤 이유에서든,독서선Bash 및 다양한 기타 프로그램(sqlite 포함)에서 사용하는 입력 라이브러리는 이 시퀀스를 일반적인 "기록의 위쪽 화살표/이전 페이지"와 다른 작업에 바인딩합니다.

관련 정보