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
이런 것을 본 사람이 있나요?
예. 재현하려면:
- 달리기
echo foo
. - 달리기
echo bar
. - ↑↑so가
echo foo
나타납니다(또는 Ctrl+ rfoo
, soecho foo
가 나타난 다음 →줄의 끝까지 가려면 길게 누르세요). - 를 길게 누르면 빈 줄 Backspace이 되어
echo foo
실행되지 않습니다. - ↓, 그런 것
echo bar
같습니다. - Enter다시 실행하십시오
echo bar
.
그러면 history
예상할 수 있는 위치에 빈 항목이 인쇄됩니다 echo foo
. *
의미 로 표시될 것입니다이 항목은 편집되었습니다..
revert-all-at-newline
readline 변수를 확인하십시오 ( 참고 man 3 readline
).
- 임시 설정:
bind 'set revert-all-at-newline On'
Bash에서 실행. - 새로운 Bash 인스턴스에 대한 영구 설정: 또는
set revert-all-at-newline On
에 배치됩니다 ./etc/inputrc
~/.inputrc
답변2
명령 앞에 공백이 있으면 명령이 기록되지 않습니다.