[bash] Bash 기록에 명령이 표시되지 않도록하려면 어떻게해야합니까?

때로는 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축약 형입니다 . 값은 현재 행과 일치하는 모든 이전 행이 해당 행이 저장되기 전에 내역 목록에서 제거되도록합니다. 위 목록에없는 값은 무시됩니다. 경우 해제, 또는 유효한 값을 포함하지 않는 모든 라인은, 기록 목록에 저장됩니다 쉘 파서의 값에 따라 읽기ignorespaceignoredupserasedupsHISTCONTROLHISTIGNORE. 다중 행 복합 명령의 두 번째 및 후속 행은 테스트되지 않으며의 값에 관계없이 기록에 추가됩니다 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