답변:
공백으로 명령을 시작하면 기록에 포함되지 않습니다.
환경 변수 $HISTCONTROL
를 설정 해야합니다 .
다음 명령이 반환되는지 확인 ignorespace
하거나
ignoreboth
#> echo $HISTCONTROL
누락 된 환경 변수를 추가하기 위해 다음 행을 bash 프로파일에 추가 할 수 있습니다. 예 :%HOME/.bashrc
export HISTCONTROL=ignorespace
프로파일을 다시 소싱 한 후에는 공간 접두사가 붙은 명령이 작성되지 않습니다. $HISTFILE
주어진 Bash 세션에서 다음을 입력하여 히스토리 파일을 / dev / null로 설정하십시오.
export HISTFILE=/dev/null
주석에서 지적했듯이 이것은 세션의 명령을 기록에 쓰지 않습니다!
시스템 관리자의 노력을 망쳐 놓지 마십시오.;)
Doodad의 솔루션 은 더욱 우아합니다. 변수를 설정 해제하기 만하면됩니다 : unset HISTFILE
(감사합니다!)
/dev/null
로그 아웃시 권한이 0600으로 설정되는 문제가 발생했습니다 . 대신 나는을 사용했다 unset HISTFILE
.
@John Doe & @ user3270492의 답변 확장. 그러나 이것은 나를 위해 작동하는 것 같습니다.
<your_secret_command>; history -d $((HISTCMD-1))
히스토리에 명령 항목이 표시되지 않아야합니다.
여기에 설명이 있습니다 ..
'history -d'는 기록에서 언급 된 항목을 삭제합니다.
HISTCMD는 다음에 실행될 명령의 command_number를 저장합니다. 따라서 (HISTCMD-1)은 마지막으로 실행 된 명령을 나타냅니다.
아마도 역사처럼 쉘을 사용하는 것을 고려할 수 있습니다.
/bin/sh << END
your commands without history
END
(아마도 /bin/dash
또는 /bin/sash
보다 더 적합 할 수 있음 /bin/sh
)
또는 배치 유틸리티를 더 잘 사용하십시오.
batch << EOB
your commands
EOB
역사는 포함됩니다 sh
또는 batch
이는 매우 의미가 없습니다
당신은 세션을 시작할 수 있습니다
export HISTFILE=/dev/null ;history -d $(history 1)
그런 다음 은밀한 행동을 계속하십시오. histfile을 설정하면 /dev/null
히스토리 파일에 기록되지만이 항목은 즉시 삭제되며 최소한 히스토리 파일에 추적이 표시되지 않습니다.
또한 이것은 영구적이지 않습니다.
코멘트 에서 Doodad가 언급했듯이 , unset HISTFILE
이 작업은 훌륭하게 수행하지만 일부 기록을 삭제하려는 경우 echo $HISTFILE
기록 파일 위치 (일반적으로 ~/.bash_history
) 를 가져 unset HISTFILE
오고 편집하십시오 ~/.bash_history
( HISTFILE
물론 지금 무엇이든 unset
할 수 있습니다. 읽지 마십시오).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
그런 다음 기록을 편집하고 편집 한 사실을 편집했습니다!
unset HISTFILE; echo TEST; history
명령 echo TEST
을 제공합니다 . 세션을 종료하고 다시 연결 한 후에도 히스토리에는 실제로이 항목이 없습니다. 그래서 나는 그것이 작동한다고 말할 것입니다 :)
unset HISTFILE
메모리의 히스토리에 기록 된 명령을 중지하는 것 같지 않지만 $ HISTFILE이었던 파일에 기록되는 명령은 중지합니다. 따라서 여전히 로컬 기록이 메모리에 있다고 생각하지만 더 이상 파일에 기록되지 않으므로 원하는 것입니다! ;)
다음 명령을 사용할 수도 있습니다.
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
나는 그것이 매우 휴대용 명령이라고 생각합니다.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
그리고 지금 당신은 다음과 같이 할 수있다 :mysql -uroot -pSecretPassword ; forget
$s
와 sed의 다른 변경으로 인해 별칭 대신 함수를 만들어야한다는 것을 알고 있습니다 . function forget() { // put code here // }
zsh 를 사용하는 경우 다음 을 실행할 수 있습니다.
setopt histignorespace
이것을 설정하면 공백으로 시작하는 각 명령 이 기록에서 제외됩니다.
별칭 을 사용 .zshrc
하여이 기능을 켜 거나 끌 수 있습니다 .
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
이를 달성 할 수있는 몇 가지 방법이 있습니다. 히스토리 파일의 크기를 0으로 설정합니다.
export HISTFILESIZE=0
히스토리 파일을로 설정하여 /dev/null
효과적으로 비활성화합니다.
export HISTFILE=/dev/null
개별 명령의 경우 명령 앞에 공백을두면 내역 파일에 저장되지 않습니다. 이를 위해서는 환경 변수 ignorespace
에 값이 포함되어 있어야 $HISTCONTROL
합니다 (man bash 및 ignorespace
자세한 내용 검색 ).