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


96

때로는 rm -rf XYZ.NET에서 같은 명령을 실수로 다시 실행할 수 있으므로 Bash 기록에이 내용이 기록되는 것을 원하지 않는 경우가 있습니다 reverse-i-search. 이런 일이 발생하지 않도록하는 좋은 방법이 있습니까?



쉘 스크립트 (따라서 프로그래밍)를 작성하는 데 사용할 bash 있지만 이 특정 측면은 프로그래밍과는 전혀 관련이 없습니다 (역사는 대화 형 전용입니다). 마감 투표.
paxdiablo

답변:


114

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.

또한보십시오:


53

.bashrc / .bash_profile / 원하는 곳에 export HISTIGNORE=' *'. 그런 다음 무시하려는 명령을 공백 하나로 시작하십시오.

$ ls  # goes in history
$  ls # does not

4
이는 HISTCONTROL반드시 ignorespace설정 되지 않은 환경 변수 의 값에 따라 다릅니다 .
sorpigal 2011-06-25

3
HISTCONTROL포함하는 경우 ignorespace실제로`*`를 포함하는 것은 중복됩니다 HISTIGNORE. 둘은 독립적으로 작동합니다.
chepner

22

더 나은 사용 HISTIGNORE. 이를 통해 무시할 패턴 세트 (예 :)를 지정할 수 있습니다 rm. 모든 역사를 /dev/null.


아 그래, :) 하나 잊어
코리 헨더슨을

13
kill -9 $$

나는 그것이 이전 답변만큼 최선이 아니라는 것을 알고 있지만 이것은 아무것도 저장하지 않고 현재 Bash 셸을 죽일 것입니다 .HISTCONTROL이 기본적으로 설정되어 있지 않거나 설정하는 것을 잊었을 때 유용합니다. 일부 암호를 입력하고 기록에 영구적으로 남아있는 것을 원하지 않습니다.

이것은 빠른 방법이며, 히스토리 저장 쉘 외부에서해야하기 때문에 히스토리 파일을 지우는 것과 같은 것은 좋지 않습니다 (다른 사용자로 로그인하고 su / sudo 사용, 백그라운드 작업 생성 등).


8

다음 두 가지 중 하나를 수행 할 수 있습니다.

export HISTFILE=/dev/null

또는 공백으로 명령을 시작하십시오.


5
그 앞에 공백을 끝내
에릭 포티스에게

8
우리 중 일부는 공백이 앞에 붙은 명령을 자동 무시하는 것이 정말 나쁜 생각이므로 ignorespace기본적으로 설정되어 있지 않다고 생각 합니다.
sorpigal

3
설정 HISTFILE이 방법을 방지하는 저장 어떤 이력을 상기 메모리 이력에 추가되는 명령을 막지 않는다.
chepner

3

또는

unset HISTFILE

(이전 답변과 비슷하지만 더 짧습니다 : export HISTFILE = / dev / null)


1
이는 메모리 내 기록이 아닌 디스크 기록에만 영향을줍니다.
chepner

2

셸 시작시, 거기에 있고 싶지 않은 항목에서 기록을 명시 적으로 정리합니다. 예를 들어, 나는 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.