때로는 rm -rf XYZ
.NET에서 같은 명령을 실수로 다시 실행할 수 있으므로 Bash 기록에이 내용이 기록되는 것을 원하지 않는 경우가 있습니다 reverse-i-search
. 이런 일이 발생하지 않도록하는 좋은 방법이 있습니까?
답변
HISTCONTROL
환경 변수를로 설정 한 경우 ignoreboth
(일반적으로 기본적으로 설정 됨) 선행 공백 문자가있는 명령은 기록에 저장되지 않습니다 (중복 항목 포함).
예를 들면 :
$ HISTCONTROL=ignoreboth
$ echo test1
$ echo test2
$ history | tail -n2
1015 echo test1
1016 history | tail -n2
내용 man bash
은 다음과 같습니다 .
HISTCONTROL
명령이 히스토리 목록에 저장되는 방법을 제어하는 콜론으로 구분 된 값 목록입니다. 값 목록이 포함되어있는 경우
ignorespace
, 공백 문자로 시작하는 라인은 기록 목록에 저장되지 않습니다 . 값은ignoredups
이전 기록 항목과 일치하는 행이 저장되지 않도록합니다. 의 값은 및의ignoreboth
축약 형입니다 . 값은 현재 행과 일치하는 모든 이전 행이 해당 행이 저장되기 전에 내역 목록에서 제거되도록합니다. 위 목록에없는 값은 무시됩니다. 경우 해제, 또는 유효한 값을 포함하지 않는 모든 라인은, 기록 목록에 저장됩니다 쉘 파서의 값에 따라 읽기ignorespace
ignoredups
erasedups
HISTCONTROL
HISTIGNORE
. 다중 행 복합 명령의 두 번째 및 후속 행은 테스트되지 않으며의 값에 관계없이 기록에 추가됩니다HISTCONTROL
.
또한보십시오:
답변
.bashrc / .bash_profile / 원하는 곳에 export HISTIGNORE=' *'
. 그런 다음 무시하려는 명령을 공백 하나로 시작하십시오.
$ ls # goes in history
$ ls # does not
답변
더 나은 사용 HISTIGNORE
. 이를 통해 무시할 패턴 세트 (예 :)를 지정할 수 있습니다 rm
. 모든 역사를 /dev/null
.
답변
kill -9 $$
나는 그것이 이전 답변만큼 최선이 아니라는 것을 알고 있지만 이것은 아무것도 저장하지 않고 현재 Bash 셸을 죽일 것입니다 .HISTCONTROL이 기본적으로 설정되어 있지 않거나 설정하는 것을 잊었을 때 유용합니다. 일부 암호를 입력하고 기록에 영구적으로 남아있는 것을 원하지 않습니다.
이것은 빠른 방법이며, 히스토리 저장 쉘 외부에서해야하기 때문에 히스토리 파일을 지우는 것과 같은 것은 좋지 않습니다 (다른 사용자로 로그인하고 su / sudo 사용, 백그라운드 작업 생성 등).
답변
다음 두 가지 중 하나를 수행 할 수 있습니다.
export HISTFILE=/dev/null
또는 공백으로 명령을 시작하십시오.
답변
또는
unset HISTFILE
(이전 답변과 비슷하지만 더 짧습니다 : export HISTFILE = / dev / null)
답변
셸 시작시, 거기에 있고 싶지 않은 항목에서 기록을 명시 적으로 정리합니다. 예를 들어, 나는 rm -rf
역사에 어떤 것도 원하지 않습니다 (단 하나의 Arrow-Up
+ Enter
: 만으로 밤새 처리 된 결과로 가득 찬 디렉토리를 제거한 후 트라우마입니다)
내 init 파일에 다음 스 니펫을 넣었습니다 (에서 작동 .zshrc
하며에서도 작동해야 함 .bashrc
)
# ...
HISTFILE=~/.zshhistory
# ...
# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE