기록을 저장하지 않고 터미널을 닫으려면 어떻게합니까?


33

한 번 이상 실수로 여러 명령을 실행하고 내 배쉬 기록을 오염 시켰습니다. bash 기록을 저장하지 않고 터미널을 닫으려면 어떻게해야합니까? Fedora를 사용하고 있습니다.

답변:


25

쉘 히스토리는 HISTFILE변수가 나타내는 파일에 저장됩니다 . 그래서:

unset HISTFILE

이것은 zsh에도 적용되지만 ksh에는 적용되지 않습니다. ksh $HISTFILE는 쉘이 시작될 때 표시되는 파일에 계속 저장 합니다 (역순으로 쉘을 시작하면 ksh에 히스토리를 저장하기로 결정 함).


역사를 오염시킨 후 로그 아웃하기 전에 이것을 사용할 수 있습니까? 그리고이 세션에 대한 유일한? set HISTFILE다음에 로그인 할 필요가 없습니까? (이 올바른 또는 잘못된 경우 바로 말)

@ acidzombie24 맞습니다. 변경 사항을 명시 적으로 (예 : rc 파일) 저장하지 않으면 환경 변수의 변경 사항이 세션 전체에 저장되지 않습니다.
jw013

31

짧은 답변:

프롬프트에서 이것을 입력하십시오.

$ kill -9 $$

이것은 바로 할 수있는 쉘없이 쉘을 죽일 것을 , 역사, 저장, 트랩으로 신호를 같은 실행 ~/.bash_logout, 정지 작업에 대한 경고, 또는 좋은 물건 중 하나.

긴 대답 :

참고 :이 옵션은 상호 배타적이지 않습니다 . 한 번에 모두 사용할 수 있습니다.

옵션 1:

히스토리 파일을 어지럽히는 데있어 완벽 주의자라면 HISTIGNORE기록하고 싶지 않은 명령을 포함 하도록 변수를 수정하면 됩니다. 예를 들어, 추가 할 경우 HISTIGNORE='ls*:cd*'사용자에 ~/.bashrc의 다음 인스턴스 lscd히스토리 파일에 삽입되지 않습니다.

옵션 2 :

명령별로 명령에서 히스토리에서 제외되는 명령을 제어하려는 경우 HISTCONTROL='ignorespace'공백으로 시작하는 명령 행이 생략되도록 설정할 수 있습니다 . 를 사용 ignoreboth하면 반복되는 줄도 생략됩니다. 그런 다음 명령을 입력하기 전에 스페이스 바를 누르면 히스토리 파일에 표시되지 않습니다.

옵션 3 :

터미널을 닫을 때 셸이 즉시 종료되도록 trap하려면 터미널 프로그램이 셸을 보내는 신호 ( xterm예 : 전송 SIGHUP한 다음 셸이 종료 될 때까지 기다림)를 할 수 있습니다. 이 신호를받습니다. 이것을 다음에 추가하십시오 ~/.bashrc.

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
'kill -9 $$'방법의 경우 +1 HISTIGNORE 등이 읽기 전용으로 설정된 상황에서는 확실히 한 가지 방법입니다.
코리 헨더슨

7
나는 kill -9다른 모든 것이 실패했을 때 무서운 상황을 제외하고는 아무것도 사용하지 않는 것이 좋습니다 .
Christoffer Hammarström

1
SIGKILL을 표준 운영 절차로 보내는 것은 결코 좋은 생각이 아닙니다 . HISTFILE 설정 해제와 같은 적절한 절차를 사용하십시오.
Arcege

@Arcege TMTOWTDI.
amphetamachine

나는 그 반대를 알고 싶었다-아쉬운 방법으로 bash를 죽이는 것이 그의 역사를 저장할 것입니다.
mveroone

3

나는 history -c바로 전에 아무도 제안하지 않은 것을보고 놀랐습니다 exit. 잘 할 IINM (나는 전문가가 아닙니다).


2
당신은 올바른 길을 history -r가고 있습니다 : 기록 파일을 다시 읽을 것이므로 저장은 아무런 문제가되지 않습니다.
Simon Richter

역사를 플러시하는 것은 나쁜 습관입니다 ... 쉘 역사에는 누가 무엇을했는지에 대한 유용한 정보가 많이 있습니다. 그것은 (당신이 문서 변경 관리에 대한 100 % 확신하지 않는 한) 당신의 플랫폼에서 새로운 사람들을 위해 매우 유용
프랭클린 PIAT

2

bash가 히스토리 파일을 판별하기 위해 사용하는 두 가지 환경 변수와 쉘이 종료 될 때 기록 할 행 수는 두 개입니다.

다음 중 하나를 사용하여 세션 히스토리를 버릴 수 있습니다 (히스토리 파일에서 생략하려는 세션 중에 설정 됨).

HISTFILE=/dev/null

또는

HISTSIZE=0

이 중 하나는 Bdora on Fedora에서 잘 작동합니다.


1

왜 명령 기록에 관심이 있는지 잘 모르겠습니다. 특정 명령이 자주 필요한 경우 별명을 정의하면 더 재미있어서 기록에서 찾아 보지 않고 두 번의 키 입력으로 다시 가져올 수 있습니다.


0
  1. Eli는 이미 Bash에 대한 정답을 설정했습니다 HISTSIZE=0.

  2. 난 그냥 GNU 화면에 대한 방법을 추가합니다 . Ctrl+A(화면 이스케이프 시퀀스)와을 차례로 누릅니다 :scrollback 0. 스크롤 이력이 삭제됩니다. 이제 :scrollback 15000스크롤 백 버퍼 크기를 즉시 재설정 할 수 있습니다 .


OP는 언제 사용한다고 말했 screen(1)습니까?
amphetamachine

그는하지 않았다. 그러나 화면 세션 내에서 Bash를 실행할 수 있으며 HISTSIZE = 0은 여전히 ​​활동 세부 정보를 화면의 스크롤 백 버퍼에 남겨 둡니다. 따라서 정말로 깨끗하게 원한다면 그렇게해야 scrollback=0합니다.
gsbabil

스크롤 백 버퍼는 윈도우가 닫히면 (즉, 셸이 종료 될 때) 지워집니다. Ctrl-a H를 입력하면 어떨까요? 로그 파일을 종료합니까?
amphetamachine

@ amphetamachine : 아니요, 현재 창의 로깅 만 시작 / 종료합니다. 그 어느 누구도 역사를 제거 Ctrl+a H하지 않을 Ctrl+a :clear것입니다. 당신은 필요합니다 Ctrl+a :scrollback 0. 직접 테스트 할 수 있습니다. 새로운 화면 세션을 시작하십시오. 지금을 cat /etc/passwd. 이제 위 Ctrl+a H또는 -중 하나를 수행하십시오 Ctrl+a :clear. 이제 화면 버퍼에서 donig a로 복사 한 Ctrl+a [다음 위쪽 화살표를 눌러 올라가서 복사 할 수있는 거리를 확인하십시오. Ctrl+a :scrollback뒤에 a를 수행하면 clear스크롤 백 버퍼가 없으므로 현재 창에서 볼 수있는 한 멀리 만 이동합니다.
gsbabil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.