bash 쉘 기록 메커니즘이 신뢰할 수 없습니까?

bash 쉘 기록 메커니즘이 신뢰할 수 없습니까?

Bash 프롬프트에서의 일반적인 작업 흐름에는 명령을 입력하고 Ctrl+R"리터럴" 메커니즘을 사용하여 검색하는 작업이 포함됩니다.

나는 지난 몇 년 동안 때때로 명령이 bash 기록에서 무작위로 사라지는 것을 발견했습니다.

다음 명령을 입력하고 성공적으로 실행한다고 가정해 보겠습니다.

$ command A arg1 arg2
$ command B arg3
$ command C arg4

...그런 다음 Enter를 누르세요 Ctrl+R arg1. 예를 들어 "failed-reverse-i-search `arg1' ..." 오류가 발생합니다.

흥미롭게도 후속 조치를 취하면 다음과 같습니다.

$ history | less

... command A실제로는 기록이 아니지만... 기록에 별표로 시작하는 "열 0" 행이 있습니다. 열 0은 기록에 기록된 명령이 시작되는 열의 왼쪽에 있는 열을 의미합니다. 빈 확인.

이런 것을 본 사람이 있나요?

이것은 bash 5.0.3을 실행하는 debian/linux stable(buster)에 있습니다.

답변1

이런 것을 본 사람이 있나요?

예. 재현하려면:

  1. 달리기 echo foo.
  2. 달리기 echo bar.
  3. so가 echo foo나타납니다(또는 Ctrl+ rfoo, so echo foo가 나타난 다음 줄의 끝까지 가려면 길게 누르세요).
  4. 를 길게 누르면 빈 줄 Backspace이 되어 echo foo실행되지 않습니다.
  5. , 그런 것 echo bar같습니다.
  6. Enter다시 실행하십시오 echo bar.

그러면 history예상할 수 있는 위치에 빈 항목이 인쇄됩니다 echo foo. *의미 로 표시될 것입니다이 항목은 편집되었습니다..

revert-all-at-newlinereadline 변수를 확인하십시오 ( 참고 man 3 readline).

  • 임시 설정: bind 'set revert-all-at-newline On'Bash에서 실행.
  • 새로운 Bash 인스턴스에 대한 영구 설정: 또는 set revert-all-at-newline On에 배치됩니다 ./etc/inputrc~/.inputrc

답변2

명령 앞에 공백이 있으면 명령이 기록되지 않습니다.

관련 정보