sh에서 히스토리 버퍼에 액세스하는 방법은 무엇입니까? (Bash에서는 아님)

sh에서 히스토리 버퍼에 액세스하는 방법은 무엇입니까? (Bash에서는 아님)

명령 내역이 있나요?, 액세스 방법 및 명확성을 보장하는 방법과 같은?

여기서 쉘을 명확히 하기 위해: GUI가 아닌 Linux 시스템에 로그인했다고 가정하고,$쉘Bash로 설정하는 대신 Dash 또는 Bourne과 유사한 쉘로 설정하십시오.

매뉴얼 페이지에는 일부 BSD 시스템에서 본 "history" 명령이 언급되어 있지만 이는 실제로 내 쉘에 있지 않으며 후속 sh 매뉴얼 페이지와 정보 페이지에서 답변을 쉽게 찾을 수 없습니다.

설명자 설명이 게시물어쩌면 이것이 키 바인딩을 이해해야 하는 것과 더 관련이 있을 수도 있다고 생각하게 되었습니다.실제로 껍질의 차이와 같은 것이 아닙니다.

미래의 독자들을 위해 여기에 쉘의 역사에 대한 훌륭한 기사가 있습니다..

답변1

모든 쉘이 기록을 지원하는 것은 아닙니다. libedit 지원으로 컴파일된 경우 dash명령을 통해 제한된 내역 지원이 제공되지만 fc그렇지 않은 경우에는 제공되지 않습니다. dash기록 파일을 저장할 수 없습니다.

일반적으로 쉘이 위쪽 화살표 키를 지원하지 않으면 기록 파일도 저장되지 않는다고 가정할 수 있습니다. 이것은 엄격하고 빠른 규칙은 아니지만 제가 접하는 모든 경우에 해당됩니다.

일부 다른 쉘( bash특히 다른 쉘)은 일반적으로 기록을 홈 디렉토리에 파일로 저장하고 프로그램 이름으로 대체하는 readline을 사용 ~/.*_history합니다 *. 예를 들어 Python 3은 readline을 사용하고 해당 기록을 ~/.python_history.

셸에 따라 저장 위치를 ​​구성할 수도 있고 구성하지 않을 수도 있습니다. bash그리고 (모두 대문자) 변수를 zsh사용하십시오 . HISTFILE쉘이 올바르게 구성된 경우해서는 안 된다은 환경 변수이므로 에서 본다면 실수를 한 것입니다(그러나 envor 의 출력에는 계속 표시되어야 합니다).setprintf %s\\n "$HISTFILE"

프로그램이 기록을 지원하지 않는 경우(예: ed쉘 스크립트 read또는 이전 버전 사용) bash와 같은 탭 완성, readline을 사용한 화살표 키 처리 및 기록 기록을 제공하는 mysql크로스 플랫폼 애플리케이션이 호출됩니다 .rlwrap

답변2

명시적으로 설정하지 않는 한 기본 쉘 기록은 없습니다. 있는지 확인하려면 env|grep -i hist명령을 실행할 수 있습니다. etc(대문자로 표시됨)와 같은 변수가 표시되면 histfile셸 기록이 활성화되어 기록 파일이 어디에 있는지 확인해야 함을 의미합니다. 정리하려면 파일을 삭제하는 것 외에 적절한 방법을 사용할 수 있습니다

답변3

보기 흉하지만 sh만 사용할 수 있는 이전 시스템(예: ESXi 호스트)에서 이것을 사용합니다.

cat `printf %s $HISTFILE`

답변4

히스토리 명령을 입력하지 않고 히스토리 파일을 지우는 솔루션을 찾았습니다. .(셸/패키지 이름)_history 파일 경로(일반적으로 홈 디렉터리에 있음)를 찾아 어딘가에 빈 파일을 만든 다음 cat path/to/history 파일을 사용합니다. < Path/to/empty 이후 파일을 삭제하면 기록이 지워집니다. 이 스크립트를 사용하여 name.sh 파일을 만들 수 있습니다.

관련 정보