history — 실행 이력 목록 다루기

history — 실행 이력 목록 다루기

대화형 셸에서 방금 실행한 명령을 다시 부르고 싶을 때, Tcl의 history 명령어로 최근 실행된 명령어 기록을 조작할 수 있어요. 실행된 명령 하나하나를 '이벤트(event)'라고 불러요.

출처: Tcl Built-In Commands — history

본문

시그니처

history ?option? ?arg arg ...?

history 명령어는 이력 목록에 기록된 최근 실행 명령어와 관련된 여러 작업 중 하나를 수행해요.

이벤트를 지정할 때 다음 형태를 쓸 수 있어요:

  • 숫자 — 양수면 그 번호의 이벤트를 가리켜요(모든 이벤트는 1부터 번호가 매겨져요). 음수면 현재 이벤트 기준 상대 위치를 선택해요(-1은 이전 이벤트, -2는 그 이전, 이런 식). 이벤트 0은 현재 이벤트예요.
  • 문자열 — 그 문자열과 매칭되는 가장 최근 이벤트를 선택해요. 문자열이 이벤트의 첫 문자들과 같거나, string match 명령어의 의미로 이벤트와 매칭되면 일치로 봐요.

하위 명령어

  • history — 아래 history info와 같아요.
  • history add command ?exec?command 인자를 새 이벤트로 이력 목록에 추가해요. exec를 지정하면(축약 가능) 명령어도 실행하고 그 결과를 반환해요. 지정하지 않으면 빈 문자열을 반환해요.
  • history change newValue ?event? — 이벤트에 기록된 값을 newValue로 교체해요. event는 교체할 이벤트를 지정하며 기본값은 현재 이벤트(-1 아님)예요. 새로운 형태의 이력 치환을 구현하는 명령어가 치환으로 만들어진 명령어로 현재 이벤트를 대체하고 싶을 때 쓰도록 의도됐어요. 반환값은 빈 문자열이에요.
  • history clear — 이력 목록을 지워요. 현재 keep 한도는 유지되고 이벤트 번호는 리셋돼요.
  • history event ?event?event가 주는 이벤트의 값을 반환해요. 기본값은 -1이에요.
  • history info ?count? — 이력 목록의 각 이벤트에 대해 이벤트 번호와 내용을 주는(사람이 읽기 좋은) 형식화된 문자열을 반환해요. 현재 이벤트는 제외돼요. count를 지정하면 가장 최근 count개만 반환해요.
  • history keep ?count? — 이력 목록의 크기를 count개 이벤트로 바꿔요. 처음에는 20개를 유지해요. count를 지정하지 않으면 현재 keep 한도를 반환해요.
  • history nextid — 이력 목록에 다음으로 기록될 이벤트의 번호를 반환해요. 명령줄 프롬프트에 이벤트 번호를 출력할 때 유용해요.
  • history redo ?event?event가 가리키는 명령어를 다시 실행하고 그 결과를 반환해요. 기본값은 -1이에요. 이 명령은 이력 개정(history revision)을 일으켜요(아래 참고).

이력 개정 (HISTORY REVISION)

8.0 이전 Tcl에는 복잡한 이력 개정 메커니즘이 있었어요. 현재 메커니즘은 훨씬 단순하고, 옛 substitute·words 연산은 제거됐어요(그 대신 clear 연산이 추가됐죠).

history redo는 훨씬 단순한 '이력 개정'을 만들어요. 이 옵션을 호출하면 가장 최근 이벤트가 수정되어, history 명령어를 제거하고 그 자리에 history 명령어의 결과로 대체돼요. 이력을 수정하지 않고 이벤트를 다시 실행하고 싶다면 event 연산으로 이벤트를 가져온 다음 add 연산으로 이력에 추가하고 실행하면 돼요.

더 알아보기