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


26

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

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


3
나는이 질문의 제목을 좋아한다. 실제로 역사를 바꿀 수 있고 불평하고 있습니까? 무슨 일이야?!
Daniel Beck

@Daniel : Lol, 그래 ... 내 과거를 바꾸는 것처럼 말이야. 분명히 무의미하고, 그것은 잠시 후에 엄청나게 짜증납니다. : \
Mehrdad

Btw, history-search-xxx를 대신 사용하면 동작이 다릅니다. 어쩌면 그게 당신을위한 것일까 요?
Daniel Beck

@Daniel : 정말 유용합니다. 감사합니다. 그러나 여전히이 질문에 대한 답을 알고 싶습니다. 때때로 명령이 서로별로 다르지 않아 작동하지 않기 때문입니다.
Mehrdad 2016 년

빈 프롬프트가있는 history-search는 일반 히스토리 이전 / 다음과 같이 작동합니다 (예 : 모든 항목 표시).
Daniel Beck

답변:


17

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


당신은 굉장합니다. 정확히 내가 필요한 것입니다. 더 이상 모니터를 펀치하고 싶지 않습니다. : D +1000000 (나는 바란다)
Mehrdad

5

나는 입력 :

ls /tmp

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

ls /temp 

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

 ls /temp

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

그것은에 의해 제어

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

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

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


하아; 나는 항상 선행 공간으로 명령을 저장하지 않는 것이 버그라고 생각했습니다. 감사. :)
sarnold 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.