한 번 이상 실수로 일부 명령을 실행하여 bash 기록을 오염시켰습니다. bash 기록을 저장하지 않고 터미널을 닫는 방법은 무엇입니까? 저는 페도라를 사용하고 있습니다.
답변1
이를 달성하는 방법에는 여러 가지가 있습니다.
참고: 이 옵션은아니요상호 배타적이며 어떤 조합으로든 동시에 사용할 수 있습니다.
옵션 0
HISTFILE
쉘 변수를 삭제합니다 .
unset HISTFILE
HISTFILE
매뉴얼 페이지에 따르면, 설정을 해제한 후 설정 여부 에 관계없이 파일에 기록을 자동으로 기록하는 쉘의 기능이 제거됩니다 .
옵션 1
지저분한 기록 파일을 다룰 때 완벽주의자라면 HISTIGNORE
기록하고 싶지 않은 명령 집합을 포함하도록 변수를 수정하는 것뿐입니다. 예를 들어, then HISTIGNORE='ls*:cd*'
에 ~/.bashrc
then 의 인스턴스를 추가하면 기록 파일에 삽입되지 않습니다 ls
.cd
이 변수는 extglob
열 때 다음을 따릅니다.
shopt -s extglob
# With `extglob` on I can use extended globs to ignore all:
# cd ..
# cd ../
# cd ..//
# cd ../..
# cd ../../
# cd ../..//
# etc.
HISTIGNORE='cd +(..|../)*(/)'
cd ..
, cd ../
등은 무시 cd ../..
하지만 그대로 유지 됩니다 cd myfolder
.
glob 확장에 대한 자세한 내용은 다음에서 확인할 수 있습니다.배쉬 매뉴얼 페이지.
옵션 2
명령별로 기록에서 제거되는 명령을 제어하려면 HISTCONTROL='ignorespace'
공백으로 시작하는 명령줄을 생략할 명령을 설정할 수 있습니다. 를 사용하면 ignoreboth
중복된 줄도 생략됩니다. 그런 다음 명령을 입력하기 전에 스페이스바를 누르면 해당 명령이 기록 파일에 나타나지 않습니다.
# With HISTCONTROL=ignorespace (or =ignoreboth) this line gets written to history
$ mycommand
# But this line does not
$ mycommand
옵션 3
터미널을 닫을 때 즉시 쉘이 종료되기를 원하는 경우 trap
터미널 프로그램이 쉘에 신호를 보내고( xterm
예: 신호를 보낸 SIGHUP
다음 쉘이 종료될 때까지 대기) 기록을 저장하지 않고 종료하도록 할 수 있습니다. 이 신호가 수신되었습니다. 다음 항목에 추가하세요 ~/.bashrc
.
# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
옵션 4
어떤 사람들은 이것을 "야만적인" 접근 방식으로 생각할 수도 있지만 SIGKILL
PID를 쉘에 보내면 쉘이 즉시 종료되며 쉘은 이를 수행할 수 없습니다.아무것신호 포착, 기록 저장, 실행 ~/.bash_logout
, 중지된 작업에 대한 경고 또는 기타 좋은 내용과 같습니다.
( $$
명령을 실행하는 쉘 프로세스의 PID로 확장됨)
kill -9 $$
답변2
쉘의 기록은 이 변수가 나타내는 파일에 저장됩니다 HISTFILE
. 그래서:
unset HISTFILE
이는 zsh에서도 작동하지만 ksh에서는 작동하지 않습니다. ksh에서는 쉘이 시작될 때 지시된 파일에 계속 저장합니다 $HISTFILE
(반대로 쉘을 시작하면 기록을 ksh에 저장하기로 결정합니다).
답변3
history -c
나는 이전에 아무도 이것을 제안하지 않았다는 것에 놀랐습니다 exit
. IINM(저는 전문가는 아닙니다)이 훌륭한 일을 해낼 것입니다.
답변4
명령 기록에 왜 그토록 관심을 두는지 잘 모르겠습니다. 특정 명령이 자주 필요한 경우 해당 명령에 대한 별칭을 정의하면 기록에서 찾아볼 필요 없이 두 번의 키 입력으로 해당 명령을 검색할 수 있어 더 재미있을 수 있습니다.