주어진 쉘에서 bash_history를 일시적으로 중단 하시겠습니까?


115

일종의 "시크릿"모드로 들어가기 위해 bash에서 기록 추적을 일시적으로 중지하는 방법이 있습니까? 기록 된 민감한 재무 정보를 원하지 않는 물건을 터미널에 입력하고 있습니다.

답변:


153

이것은 당신이 찾고있는 것이어야합니다 :

unset HISTFILE

에서 man bash

HISTFILE을 설정하지 않았거나 기록 파일을 쓸 수없는 경우 기록이 저장되지 않습니다.

또는이 기능을 껐다가 다시 켜려면 사용하기가 더 쉬울 수 있습니다 set.

끄다

set +o history

켜다

set -o history

12
값은 HISTFILEbash가 종료 될 때만 확인되므로 첫 번째 방법은 그대로 작동하지 않습니다 (값을 복원하면 명령이 저장 됨). set +o history지시대로 작동합니다.
Gilles

5
고마워요 비밀 작업을 할 때 사용 set +o history하고 set -o history앞뒤로 전환합니다;)
Naftuli Kay

1
unset HISTFILE작동하지 않습니다. set -/+o history매력처럼 작동합니다! 고마워
kholofelo Maloma

4
팁으로 명령 앞에 공백을두면 (공백으로 명령을 시작) 이력에 기록되지 않으며 위 / 아래 화살표 키도 표시되지 않습니다.
Mahdi

1
이것은 zsh btw에서 작동하지 않습니다
Shubham Chaudhary

33

bash를 사용하여 HISTCONTROL="ignorespace"히스토리에 기록하지 않으려는 명령을 공백으로 설정 하고 선행하십시오. 조치를 잊어 버린 경우 history -d <number>특정 항목 history -c을 삭제하거나 전체 명령 기록을 지우는 것도 있습니다.


27

HISTCONTROL포함되어 있는지 확인하십시오 ignorespace. 당신은 아마 추가 할 수 있습니다 HISTCONTROL=ignorespace(또는 HISTCONTROL=ignoredups:ignorespace당신 또는 무언가) ~/.bashrc. 그런 다음 공백으로 시작하는 명령 줄은 기록에서 생략됩니다.

또 다른 가능성은 기록을 저장하지 않는 새 bash 세션을 시작하는 것입니다.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

여러 명령을 저장하지 않아도되지만 여전히 위쪽 화살표를 사용하여 이전 명령에 액세스하려면 다음을 사용하십시오.

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

명령 저장 방법을 제어하는 ​​네 가지 방법 (레벨)이 있습니다.

  1. 첫 번째이자 가장 간단한 방법은 다음을 사용하는 것입니다 ignorespace.

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    그러면 메모리 목록에 기록하지 않으려는 명령 앞에 공백을 사용할 수 있습니다 history. 결과적으로 파일로 보낼 수있는 메모리에 기록 된 명령이 없으므로에 나열된 파일로 하나의 명령을 보내지 않아도 됩니다 $HISFILE.

  2. 에 파일에 명령을 기록하지 마십시오 $HISTFILE.

    $ unset HISTFILE

    설정하지 않으면, 쉘이 종료 될 때 명령 히스토리가 저장되지 않습니다.

    Null HISTFILE=''및 / 또는 HISTFILE=/dev/null동일한 효과 로 작동하도록 설정되었습니다 . 명령이 여전히 메모리 목록에 기록되고 있음을 이해 history하거나 명령 또는 위쪽 화살표를 시도하십시오 .

    경고 : 쉘이 존재하기 전에 HISTFILE을 재설정하면 메모리에 기록 된 모든 내용이 파일에 기록 될 수 있습니다.

  3. 메모리의 히스토리 목록에 명령을 기록하지 마십시오 . 그리고 메모리에 있지 않기 때문에 파일에 기록 할 수 없습니다.

    $ shopt -ou history              # or set +o history

    shopt -os history(또는 set -o history)로 다시 활성화

  4. 메모리의 히스토리 목록에서 모든 명령을 제거하십시오.

    $ HISTSIZE=0

    모든 명령은 (메모리에서) 지워 지므로 변수가 유효한 숫자 값으로 다시 설정 될 때까지 파일에 아무것도 저장할 수 없습니다.


//, 여기에는 @Ambrose의 답변을 제외한 모든 답변이 편리한 페이지에 포함됩니다. 갈 길, @Isaac. 이를 위해 문서에 링크를 하나 또는 두 개 추가 하시겠습니까? 확신은 man history우리의 대부분을 잘라 않을 것입니다.
Nathan Basanese

1
@NathanBasanese 확장. 보다 나은?
Isaac Isaac

// , 예! Bash VariablesShopt Built-in docs에서 가져온 것으로 가정하면 정확 합니까?
Nathan Basanese

내가 읽는 동안 // 또한, 배쉬 변수 설명서를 , 나는 우연히 HISTIGNORE있는 subsumes기능 HISTCONTROL.
Nathan Basanese

(리눅스를 사용한다고 가정) : 명령을 실행하면 어떻게됩니까 LESS=+'/^ *HISTI' man bash( "수동 페이지"가 ​​아닙니까?). @NathanBasanese
Isaac

3

기록을 끄는 간단한 방법이 하나 있으므로 명령이 .bash_history파일에 저장되지 않습니다 .

명령 앞에 공백이나 탭 공간을 넣어야 명령이 기록에 저장되지 않습니다. 예를 들면 다음과 같습니다.

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwd는 앞에 공백이 있기 때문에 명령은, 역사에 매장을받지 않습니다.


이것은 작동하지 않습니다. Bash는 '-'또는 '-history'또는 다른 하이픈 명령을 찾을 수 없다고 불평합니다.
Samuel A. Falvo II

2
HISTCONTROL = "ignorespace"가 forcefsck의 응답으로 설정되어 있지 않으면 작동하지 않습니다
DeveloperChris

1
export HISTFILE=/dev/null 

그것이 나의 길입니다. 설정되지 않은 HISTORY / HISTFILE / HISTCONTROL 등이 작동하지 않는 경우 / dev / null로 내 보내면 항상 효과가 있습니다.


일시적으로 기록을 일시 중지하려면? 이것은 정규 명령으로 작동하지 않았습니다. 후속 명령이 기록에 기록되었습니다. 이것을 .bash_profile 또는 스크립트에서 호출하고 있습니까? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.