때로는 rm -rf XYZ.NET에서 같은 명령을 실수로 다시 실행할 수 있으므로 Bash 기록에이 내용이 기록되는 것을 원하지 않는 경우가 있습니다 reverse-i-search. 이런 일이 발생하지 않도록하는 좋은 방법이 있습니까?
bash 수 있지만 이 특정 측면은 프로그래밍과는 전혀 관련이 없습니다 (역사는 대화 형 전용입니다). 마감 투표.
때로는 rm -rf XYZ.NET에서 같은 명령을 실수로 다시 실행할 수 있으므로 Bash 기록에이 내용이 기록되는 것을 원하지 않는 경우가 있습니다 reverse-i-search. 이런 일이 발생하지 않도록하는 좋은 방법이 있습니까?
bash 수 있지만 이 특정 측면은 프로그래밍과는 전혀 관련이 없습니다 (역사는 대화 형 전용입니다). 마감 투표.
답변:
HISTCONTROL환경 변수를로 설정 한 경우 ignoreboth(일반적으로 기본적으로 설정 됨) 선행 공백 문자가있는 명령은 기록에 저장되지 않습니다 (중복 항목 포함).
예를 들면 :
$ HISTCONTROL=ignoreboth
$ echo test1
$ echo test2
$ history | tail -n2
1015 echo test1
1016 history | tail -n2
내용 man bash은 다음과 같습니다 .
HISTCONTROL
명령이 히스토리 목록에 저장되는 방법을 제어하는 콜론으로 구분 된 값 목록입니다. 값 목록이 포함되어있는 경우
ignorespace, 공백 문자로 시작하는 라인은 기록 목록에 저장되지 않습니다 . 값은ignoredups이전 기록 항목과 일치하는 행이 저장되지 않도록합니다. 의 값은 및의ignoreboth축약 형입니다 . 값은 현재 행과 일치하는 모든 이전 행이 해당 행이 저장되기 전에 내역 목록에서 제거되도록합니다. 위 목록에없는 값은 무시됩니다. 경우 해제, 또는 유효한 값을 포함하지 않는 모든 라인은, 기록 목록에 저장됩니다 쉘 파서의 값에 따라 읽기ignorespaceignoredupserasedupsHISTCONTROLHISTIGNORE. 다중 행 복합 명령의 두 번째 및 후속 행은 테스트되지 않으며의 값에 관계없이 기록에 추가됩니다HISTCONTROL.
또한보십시오:
.bashrc / .bash_profile / 원하는 곳에 export HISTIGNORE=' *'. 그런 다음 무시하려는 명령을 공백 하나로 시작하십시오.
$ ls # goes in history
$ ls # does not
HISTCONTROL반드시 ignorespace설정 되지 않은 환경 변수 의 값에 따라 다릅니다 .
HISTCONTROL포함하는 경우 ignorespace실제로`*`를 포함하는 것은 중복됩니다 HISTIGNORE. 둘은 독립적으로 작동합니다.
셸 시작시, 거기에 있고 싶지 않은 항목에서 기록을 명시 적으로 정리합니다. 예를 들어, 나는 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