bash 기록 수정을 취소하는 방법이 있습니까? 명령이 echo d아니라는 것을 보여줍니다

위로 누르면 이전에 입력 한 명령을 통과 할 수 있습니다. 그중 하나를 수정하면 기록이 변경된다는 것을 알았습니다. 예를 들어, 내가 입력하면 :

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

역사는 이제 두 번째 명령이 echo d아니라는 것을 보여줍니다 echo b. echo b역사상 처음 을 어떻게 유지 합니까?

예를 들어, 많은 옵션을 사용하여 정말 긴 명령을 실행한다고 가정 해보십시오. 그런 다음 사소한 변경으로 다시 실행하고 싶습니다. 따라서 역사를 찾아서 변경하고 변경했지만 실제로 다른 옵션을 생각하면서 다시 실행할 필요가 없다는 것을 알고 있습니다. 대신에. 나중에, 나는 되돌아 가서 내가 실행 한 명령이 무엇인지 상기시키고 싶다. 그러나 잠깐, 역사는 이제 잘못된 것을 보여주고있다!

이것은 매우 드물게 나타나지만, 그것이 자극적이라는 것을 알게됩니다. 원본 기록을 자동으로 보존 할 수있는 방법이 있습니까?



답변

당신의 것을 넣어보십시오 ~/.inputrc

 set revert-all-at-newline on

경우에 따라 기본값 (끄기)에서 찾을 수 있습니다. 실행 시 리턴하기 전에 히스토리 라인의 모든 변경 사항을
강제 readline로 실행 취소 해야합니다 accept-line. (에 대한 자세한 정보 man bash).

편집 :
CTRL+c 그리고 set revert-all-at-newline on이후 잘 작동합니다 bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

그러나:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

답변

보통:

CTRL-a # ENTER

할 것입니다.

수정 된 명령을 실행하면 원래 명령이 기억됩니다. 물론 실제로 실행하고 싶지 않기 때문에로 줄을 주석 처리 할 수 ​​있습니다 #.

당신의 예에서, 당신은 다음 역사상 것 : echo a, echo b, echo c, # echo d.