programing

시간이 지나면 Windows 콘솔에서 명령줄 기록(위쪽 화살표)이 손실되는 이유는 무엇입니까?

codeshow 2023. 8. 15. 11:51
반응형

시간이 지나면 Windows 콘솔에서 명령줄 기록(위쪽 화살표)이 손실되는 이유는 무엇입니까?

임의로 나타납니다. Windows Vista에서 사용하는 콘솔을 일정 시간/사용하면 명령줄 기록(또는 명령 버퍼(원하는 경우...)을 사용할 수 없게 됩니다. 위쪽 또는 아래쪽 화살표를 누르면 더 이상 아무 작업도 수행할 수 없습니다. 즉, 기록에 사용할 수 있는 항목이 기본적으로 0개입니다.

이 동작은 Cygwin, CMD 및 PowerShell에서 확인할 수 있습니다.

때때로 이 동작은 Python, MySQL 클라이언트 등 콘솔 내부에서 실행 중인 프로세스에 적용됩니다.

이것이 Windows의 고유한 문제입니까?어디 배경이요?이 문제가 없는 다른 콘솔이 있습니까?

ps - 만약 당신이 이것이 프로그래밍과 관련이 없다고 생각한다면, 예를 들어, IDE를 위한 프로그래밍이 아닌 사용 방법을 다루는 "이클립스" 태그가 붙은 거의 모든 프로그래밍 도구에 관한 다른 질문을 참조하십시오.

두 가지 방법이 있을 거예요

Far Manager는 셸에 적합한 선택입니다.모든 기능(파일/아카이브 관리, 편집기, 엄청난 수의 플러그인, 매크로)이 필요하지 않더라도 cmd, tcc, sh 또는 기타 모든 프로그램, 셸 또는 명령 프로세서의 래퍼/실행자로 사용할 수 있습니다.

예를들면

  • 배포(Far2 또는 Far3)에서 far.exe, fareng.lng 및 (선택적으로) farreng의 3개 파일을 가져옵니다.도움이 되는
  • "far.exe /w"를 실행하고 를 누릅니다.
  • 명령행에 dir, set, 메모장, putty 등의 명령을 입력합니다.

기록은 세션 간에 보존되며, 다음을 통해 액세스할 수 있습니다(기록을 필터 모드로 전환하려면 누르십시오).

Far 2.0은 기록(및 설정)을 레지스트리에 저장합니다.

Far 3.0은 SQLite 데이터베이스에 기록을 저장하며 휴대용일 수 있습니다.

또한 Far는 기록에서 명령을 자동으로 완료하거나 디스크에서 파일/경로를 자동으로 완료할 수 있습니다.그리고 플러그인(YAC)이 있는데, 이 플러그인은 별칭을 사용하여 자동 완성할 수 있습니다.

는 최근에 흥미로운 프로젝트를 발견했습니다.Clink - Microsoft Windows의 cmd.exe에 Bash의 강력한 명령줄 편집 기능을 가져옵니다.

  • GNU의 Readline 라이브러리에서 강력한 Bash와 같은 라인 편집.Readline의 바로 가기 키에 대해 자세히 알아보십시오.
  • 우수한 경로 TAB완성().
  • 클립보드에서 Ctrl-V붙여넣습니다().
  • 실행 파일/명령 및 환경 변수의 완료를 지원합니다.
  • 실행 취소/다시 실행(Ctrl-_ 또는 , )
  • 명령줄 기록이 향상되었습니다.
    • 세션 간에 지속됩니다.
    • 검색 가능(Ctrl-R 및 ).
    • 기록 확장(예:!!, !, !$).
  • Lua를 사용하여 스크립트를 작성할 수 있습니다.

프로젝트는 아직 초기 단계인 것 같아서 콘솔 에뮬레이터에서 사용할 수 있는 옵션을 만들었습니다.

Windows "DOS" 상자에는 최대 기록 버퍼 크기가 있습니다. 왼쪽 위 아이콘을 마우스 오른쪽 단추로 클릭하고 속성을 선택하면 명령 기록의 버퍼 크기가 기본적으로 50으로 표시됩니다.

Scroll Lock 키를 확인하세요. DOH! 실수로 제 것을 쳐서 위쪽과 아래쪽 화살표가 창을 스크롤했습니다.

PowerShell에서 MaximumHistoryCount 자동 변수(기본값 64)를 통해 기록의 최대 크기를 제어할 수 있습니다.

PS > $최대 기록 수

저는 이 문제에 수년간 직면해 왔습니다.대부분 bash 셸의 명령줄에서 사용되는 python과 함께 사용됩니다.오늘 이 문제가 1000번째(거의 그 이하)로 다시 발생했을 때, 저는 셸에 대한 명령 기록을 버퍼 크기 999로 설정하고 버퍼 수 999로 설정하여 문제를 해결할 수 있었습니다(각 설정에 대해 가능한 가장 큰 설정을 선택했습니다. 이전 설정 이외의 모든 설정이 작동했을 가능성이 있습니다.50/50)이었습니다.명령 기록에 액세스하려면 셸 창의 왼쪽 상단 모서리에서 마우스 오른쪽 단추를 클릭하고 속성을 선택한 다음 옵션 탭을 클릭합니다.이러한 설정이 셸의 성능에 미치는 영향은 확실하지 않지만, 지금까지 다른 영향은 없는 것으로 보이며 명령줄 기록이 이전에는 작동하지 않았던 동일한 셸에서 다시 작동합니다.저는 이 대답이 스티브 길햄의 대답과 비슷하다는 것을 알지만, 아마도 조금 더 많은 배경을 제공할 것입니다.

인정하건대, 제 대답은 효과가 있는 한 가지 실험을 포함합니다.

콘솔의 모든 기록은 Doskey에 의해 제공됩니다.또한 모든 문자 기반 대화형 프로그램(예: 프로그램 디버거 또는 파일 전송 프로그램)에서 항상 사용할 수 있으며 시작하는 각 프로그램에 대한 명령 기록 버퍼 및 매크로를 유지 관리합니다.

DOS 시대에는 실행 후 기록을 지운 소프트웨어를 기억할 수 있습니다.저는 그것들이 버그인지, 예상되는 행동인지, 또는 둘의 혼합인지 확신할 수 없습니다.그러나 이 링크의 끝에서 볼 수 있듯이 일부 Doskey 버그가 알려져 있습니다.

이 문제가 발생하면 Doskey 명령 옵션을 사용하여 수정할 수 있는지 확인해 보는 것이 좋습니다.

이런 일은 처음입니다만, 키 조합을 누르는 것이ALT+F7다음에 따라 명령 기록을 지웁니다.DOSKEY /?원인일 수도 있습니다.

"갑자기" 모든 기록이 사라지면 새 cmd-shell이 시작될 수 있습니까?테스트:

C:\Users\Guest\>doskey /history
 …long history…
C:\Users\Guest\>cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Users\Guest\>doskey /history
 …no history…
C:\Users\Guest\>exit
C:\Users\Guest\>doskey /history
 …old long history…

이 예에서는 새로운 cmd-Start가 표시되지만, 이를 사용해 보면 다음과 같습니다.

doskey /history
  …history list…
cmd echo /k
doskey /history
  …no list !

당신은 보지 못합니다.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

그러나 새 CMD-Shell이 시작되었습니다.그래서 "출구"가 이 경우에 도움이 될 수 있습니다!

Windows 10에서 Rez 환경에 있을 때 이 문제가 발생했습니다.

위의 @user1769064의 답변에 따르면 버퍼를 999로 설정하고 새 환경에서 셸을 다시 시작하면 문제가 사라집니다.999보다 더 낮은 숫자가 있을 수도 있지만, 시도해 본 적은 없습니다.

  1. 의 윈도우즈 명령 프롬프트에서 왼쪽 상단 모서리를 마우스 오른쪽 버튼으로 클릭합니다.C:\아이콘
  2. 속성 선택
  3. 옵션 탭에서 명령 기록 설정 찾기
  4. 버퍼 크기를 999로 변경
  5. 터미널을 닫고 다시 시작합니다.

언급URL : https://stackoverflow.com/questions/1241453/why-do-windows-consoles-lose-command-line-history-up-arrow-after-a-time

반응형