간혹 가다가, command 로그를 기록하고 싶지 않을 때가 있습니다. 예를 들자면, secret 환경변수를 다른 어딘가에 넣고 싶을 때입니다. zsh에서는 이럴 때, fc 명령어를 쓸 수 있습니다.

 


 문서를 보기 전에 간단한 동작 먼저 이해해 보겠습니다.

 

 fc -p 1.log를 입력해 봅시다. 인자로 1.log가 넘어갔는데요. 그 다음에 echo $HISTFILE을 입력해 보면 1.log가 나타남을 알 수 있어요. 이제, fc -P 명령을 입력한 다음에 1.log를 보겠습니다.

 

 

 그러면, 1.log에 echo $HISTFILE과 fc -P가 저장되었음을 알 수 있습니다.

 

 그러면 -p 옵션 다음에 아무것도 넣지 않은 경우 어떻게 작동할까요? fc -p 명령어를 수행한 다음에 echo $HISTFILE을 입력해 보면, 아무런 결과도 뜨지 않는데요. 이는 HISTORY를 저장하지 않는다는 의미입니다.

 

 

 이제 file 1.txt를 입력한 다음에, fc -P를 입력해 봅시다.

 

 

 그런 다음, zsh_history를 보시면 file 1.txt 명령어가 기록에 남지 않았음을 알 수 있습니다. 결론. zsh에서는 fc -p를 입력한 다음에 명령어를 입력한 후에 fc -P를 입력하면 명령어의 기록이 남지 않네요.

 

 


 이제 문서를 토대로 조금 자세하게 설명해 보겠습니다. zsh built in을 보시면 fc 명령어가 있는데요. 이 중, fc 명령어가 있습니다. -p와 -P를 볼 것인데요. 간단하게 도식화 그림을 보면서 이해해 보도록 하겠습니다. 먼저 fc -p가 들어왔습니다.

 

 

 이 때, 기존의 history list를 stack에 push 합니다. 그리고, 새로운 history list로 switch를 한다고 되어 있어요. 이 말은 무엇을 의미할까요?

 

 명령어를 치기 위해 윗 키를 누르다 보면, 이전 명령어들의 기록들을 볼 수 있습니다. 이전에 제가 clear라는 명령어를 쳐서 그런지, 키를 누르다 보니 clear가 나와 버렸군요.

 

 

 그런데, fc -p를 입력한 다음에 이전 명령어를 찾기 위해 윗 키를 계속 눌러봐도 아무런 명령어가 나타나지 않음을 볼 수 있어요. 이는, 문서에 언급이 되었다시피, 새로운 history list로 바뀌었기 때문입니다. fc -p를 입력한 다음에 제가 아무런 명령어를 친 것이 없기 때문에, 비어 있는 상태가 된 것입니다. 이 상태에서 cat 3.txt를 치면 어떻게 될까요?

 

 

 새로운 history list에 cat 3.txt가 추가됩니다. 그 다음에 fc -P를 입력하면 어떻게 될까요? destroy 되기 전에 $HISTFILE에 저장됩니다. 예를 들어, HISTFILE이 1.log였다면 1.log에 저장됩니다. fc -p에 아무런 인자 없이 전달되면, HISTFILE이 unset이 되는데요.

 

 

 이 경우, cat 3.txt를 친 기록이 파일에 저장되지 않고 그대로 destroy가 됩니다. 따라서, history list에도 남지 않게 됩니다. secret 관련한 변수들을 설정할 때 유용하게 쓰일 수 있는 것 중 하나가 되지 않을까 싶습니다.