기록을 저장하지 않고 터미널을 닫는 방법은 무엇입니까?

기록을 저장하지 않고 터미널을 닫는 방법은 무엇입니까?

한 번 이상 실수로 일부 명령을 실행하여 bash 기록을 오염시켰습니다. bash 기록을 저장하지 않고 터미널을 닫는 방법은 무엇입니까? 저는 페도라를 사용하고 있습니다.

답변1

이를 달성하는 방법에는 여러 가지가 있습니다.

참고: 이 옵션은아니요상호 배타적이며 어떤 조합으로든 동시에 사용할 수 있습니다.

옵션 0

HISTFILE쉘 변수를 삭제합니다 .

unset HISTFILE

HISTFILE매뉴얼 페이지에 따르면, 설정을 해제한 후 설정 여부 에 관계없이 파일에 기록을 자동으로 기록하는 쉘의 기능이 제거됩니다 .

옵션 1

지저분한 기록 파일을 다룰 때 완벽주의자라면 HISTIGNORE기록하고 싶지 않은 명령 집합을 포함하도록 변수를 수정하는 것뿐입니다. 예를 들어, then HISTIGNORE='ls*:cd*'~/.bashrcthen 의 인스턴스를 추가하면 기록 파일에 삽입되지 않습니다 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

어떤 사람들은 이것을 "야만적인" 접근 방식으로 생각할 수도 있지만 SIGKILLPID를 쉘에 보내면 쉘이 즉시 종료되며 쉘은 이를 수행할 수 없습니다.아무것신호 포착, 기록 저장, 실행 ~/.bash_logout, 중지된 작업에 대한 경고 또는 기타 좋은 내용과 같습니다.

( $$명령을 실행하는 쉘 프로세스의 PID로 확장됨)

kill -9 $$

답변2

쉘의 기록은 이 변수가 나타내는 파일에 저장됩니다 HISTFILE. 그래서:

unset HISTFILE

이는 zsh에서도 작동하지만 ksh에서는 작동하지 않습니다. ksh에서는 쉘이 시작될 때 지시된 파일에 계속 저장합니다 $HISTFILE(반대로 쉘을 시작하면 기록을 ksh에 저장하기로 결정합니다).

답변3

history -c나는 이전에 아무도 이것을 제안하지 않았다는 것에 놀랐습니다 exit. IINM(저는 전문가는 아닙니다)이 훌륭한 일을 해낼 것입니다.

답변4

명령 기록에 왜 그토록 관심을 두는지 잘 모르겠습니다. 특정 명령이 자주 필요한 경우 해당 명령에 대한 별칭을 정의하면 기록에서 찾아볼 필요 없이 두 번의 키 입력으로 해당 명령을 검색할 수 있어 더 재미있을 수 있습니다.

관련 정보