bash 기록 수정을 취소하는 방법이 있습니까?


9

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

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

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

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

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


1
함께 history하는 모든 명령을 볼 수 있습니다. 필요한 것을 선택할 수 있습니다. 현재 어떤 쉘을 사용하고 있습니까?
Hastur

6
나는 그것을 재현 할 수 없습니다. c를 d로 변경 한 경우 CTRL + C를 누르고 [up]을 다시 누르면 여전히이라고 표시 echo c됩니다.
Martin von Wittich

답변:


6

당신의 것을 넣어보십시오 ~/.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-c는 실제로 값을 수정하여 줄을 완전히 지우거나 아래쪽 화살표를 누른 다음 Enter 키를 누르거나 다른 명령을 실행하면 기록이 복원됩니다.
Dean Serenevy

@DeanSerenevy : 고맙습니다. 해결 방법도 좋아하고 CTRL-a nano도 사용하기 시작했습니다. :-)
Hastur

4

보통:

CTRL-a # ENTER

할 것입니다.

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

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


1
alt-shift-3bash가을 사용하는 경우을 눌러 현재 명령 행을 주석 처리 할 수 있습니다 readline. /insert-comment에서 man 3 readline(또는 man bash정보에서 이상).
cychoi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.