history — 실행 이력 목록 다루기
history — 실행 이력 목록 다루기
대화형 셸에서 방금 실행한 명령을 다시 부르고 싶을 때, Tcl의 history 명령어로 최근 실행된 명령어 기록을 조작할 수 있어요. 실행된 명령 하나하나를 '이벤트(event)'라고 불러요.
본문
시그니처
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 연산으로 이력에 추가하고 실행하면 돼요.