Bash가 기록을 변경하지 못하게하는 방법은 무엇입니까? .

키보드에서 위쪽 또는 아래쪽 화살표를 누른 다음 내 기록에서 무언가를 수정하면 영구적으로 변경됩니다. Ctrl-C를 눌렀다가 다시 불러 오더라도 여전히 변경됩니다. 내 기록에서 해당 항목을 잃어 버렸습니다.

이 문제가 발생하지 않도록하려면 어떻게해야합니까?



답변

readline 설정을 원합니다 :

set revert-all-at-newline on

그것을 넣거나 ~/.inputrc(아래 참고 참조)을 넣을 bind 'revert-all-at-newline on'수 있습니다 ~/.bashrc.

데모:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

자세한 내용은 Bash 맨 페이지에 있습니다 .

revert-all-at-newline

on‘로 설정하면 readline은 accept-line이 실행될 때 리턴하기 전에 히스토리 라인에 대한 모든 변경 사항을 취소합니다. 기본적으로 히스토리 라인은 수정 될 수 있으며 readline 호출에서 개별 실행 취소 목록을 유지합니다. 기본값은 ‘ off‘입니다.


노트 :

~/.inputrc설정 목적으로 새 파일을 작성하는 경우 revert-all-at-newlinebash는 파일에 있을 수있는 설정 대신 이 파일의 readline 설정을 사용 합니다 /etc/inputrc. 즉,에 지정된 모든 설정 /etc/inputrc이 더 이상 적용되지 않습니다. 따라서 /etc/inputrc파일이 존재 ~/.inputrc하면 다음 줄로 시작하는 것이 좋습니다 .

$include /etc/inputrc


답변

나는 입력 :

ls /tmp

– 훌륭한. 이제 들어가고 싶지 않아

ls /temp 

그리고 기록을 입력하지 못하게 할 수 있으므로 공백으로 명령을 시작하면 ls / tmp를 덮어 쓰지 않습니다.

 ls /temp

보기 힘들지만 알고 있다면 …

그것은에 의해 제어

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoreups는 중복 된 명령 만 무시하고 ignoreboth는 줄의 시작 부분에서 공백을 무시하므로 숨겨지지 않은 암호를 숨기는 데 유용합니다.

그러나 아마도 명령, 수정되지 않은 이전 명령 및 새 명령으로 끝나는 솔루션을 원할 것입니다. 내 버전의 bash 또는 설정은 다음과 같이 동작하지만 사용자와 다른 점을 모르겠습니다.