터미널 사생활 보호 모드

!
경고: 이 글이 작성된 지 365일이 넘었습니다. 글의 정보가 오래되어 부정확할 수 있습니다.

어쩔 땐 터미널 기록에 저장되기 싫은 명령문을 실행해야 될 때가 있습니다. 예를 들어, GPG 키를 관리하는 명령어들은 기록에 저장되면 안 되겠죠. 만약 그렇다면 다음 스니펫이 도움이 될 수 있습니다.

만약 zsh를 사용하신다면 다음 코드를 .zshrc에다, 아니면 bash를 쓰신다면 .bashrc (또는 .bash_profile)에다가 삽입하세요:

function incognito() {
    unset HISTFILE
    export PROMPT='[INCOGNITO] %n@%m %1~ %# '
}

사용하시는 터미널에 따라서 PROMPT 대신 PS1을 설정하셔야 될 수도 있습니다. 여기에 표시한 PS1 프롬프트는 맥OS의 기본 설정값에서 빌려 왔습니다. 필요하시다면 OS 기본 설정값이나 취향에 맞게 수정하세요.

이제 incognito를 입력하면, 현재 터미널 세션이 기록 파일에 저장되지 않습니다. 즐겁게 코딩하세요!


이 방식이 어떻게 작동하는지 궁금하시다면, 꽤 간단합니다. 터미널은 기록 파일을 사용하여 사용 기록을 저장하는데, 예로 .bash_history.zsh_history에 이전에 사용했던 명령문을 저장하여 history 명령이나 Ctrl-R 키(명령 기록 반전 탐색)로 검색하여 다시 불러올 수 있게 합니다. 이는 HISTFILE이란 변수에 저장되는데, 이를 해제해주면 터미널이 이 기록 파일을 찾지 못하여 현재 세션이 저장되지 않습니다.


추가

만약 저처럼 Powerlevel10k(ZSH 테마)를 쓰신다면, export PROMPT를 사용한 프롬프트 수정이 작동하질 않습니다. 다행히도, 테마가 엄청 좋아서 커스텀으로 세그멘트를 프롬프트바에 추가하게 해줍니다.

~/.p10k.zsh 끝에 다음을 추가합니다:

# Custom incognito segment
function prompt_is_incognito_mode() {
    if (( ! ${+HISTFILE} )); then
        p10k segment -f red -i '🥷'
    fi
}

그 다음 POWERLEVEL9K_LEFT_PROMPT_ELEMENTS를 정의하는 부분을 찾고, 맨 앞(이나 원하시는 곳 아무데나)에 is_incognito_mode를 추가합니다:

  # The list of segments shown on the left. Fill it with the most important segments.
  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    # Incognito mode indicator
    is_incognito_mode
    # =========================[ Line #1 ]=========================
    # os_icon               # os identifier
    dir                     # current directory
    vcs                     # git status
    # =========================[ Line #2 ]=========================
    newline                 # \n
    prompt_char             # prompt symbol
  )

그리고, ~/.zshrc안의 incognito 함수를 이렇게 수정할 수도 있습니다:

# Function for "incognito" mode
function incognito() {
    unset HISTFILE
    echo "Done! This terminal session will not be recorded into history."
}

이제 incognito를 실행하면 귀여운 닌자 녀석이 왼쪽에 나타납니다:

> incognito
Done! This terminal session will not be recorded into history.

 🥷  | ~
>

댓글