Bash 기록 자동 정리

Bash 기록 자동 정리

Bash 기록을 자동으로 정리하는 방법은 무엇입니까? 예를 들어

  • 기록에서 감지 가능한 철자 오류 제거( ls-lh에는 표시되지 않았 which으므로 제거하십시오. type 을 의미합니다 ls -lh)
  • 남는 공간을 정리 cd  /하고 cd /   동일하도록 표준화해야 한다.

bash에서 이것이 가능합니까? 실행되기 전이나 기록에 들어가기 전에 모든 명령을 필터링할 수 있을까요?

정리 루틴을 실행하기 전에 파일에 기록될 때까지 기다릴 필요가 없었으면 좋겠습니다. 이는 정리가 수행되기 전에 로그아웃하는 것을 의미합니다.:(

답변1

나는 발생하는 모든 일반적인 오류에 대해 별칭을 유지하는 것을 선호합니다.

alias ls-lh = ls -lh

공백이 누락된 철자 오류를 수정하려면 별칭을 사용하세요.

alias cd..='cd ..

기록에서 무시할 모든 명령을 지정하려면 HISTIGNORE를 사용하십시오. export HISTIGNORE="$LIST"무시하려는 기록을 나열 하는 데 사용됩니다 .

내장된 "shopt" 명령으로 제어되는 몇 가지 다른 옵션이 있습니다.

바라보다여기

답변2

몇 가지 변수 외에 기록을 사용자 정의하는 방법을 모르겠습니다 HIST…. zsh로 전환하고 싶을 수도 있습니다. 조금 더 똑똑합니다(그러나 약간만). zsh에서는 자동 수정 명령을 켤 수 있습니다(setopt correct), 사용 가능한 명령 이름을 기반으로 특정 철자 오류에 대한 수정 사항을 제안합니다(예를 들어 내 시스템에서는 수정 사항을 제공 sl하지만 ls아무 작업도 수행하지 않음 ls-lh). Zsh의 중복은 비연속적인 중복을 감지할 수 있기 때문에 더 똑똑합니다(setopt hist_ignore_all_dups). Zsh는 역사적으로 공백 정규화를 수행하지 않지만 완성 시스템은 bash보다 똑똑하고 전체 이름을 입력하든 클릭하든 공백 수를 일관되게 유지하므로 Tab도움이 됩니다.

답변3

~에서이 블로그, 이 스크립트는 삭제할 수 있습니다.자동으로bash에서 모든 명령을 찾을 수 없습니다.

아직 bash가 없다면 PROMPT_COMMAND다음에 추가하세요 .bashrc:

PROMPT_COMMAND="mypromptcommand"
function mypromptcommand {
}

이제 프롬프트가 나타날 때마다 함수가 실행됩니다. 그 안에 우리는 다음을 배치했습니다:

local exit_status=$?
# If the exit status was 127, the command was not found. Let's remove it from history
local number=$(history | tail -n 1 | awk '{print $1}')
if [ -n "$number" ]; then
    if [ $exit_status -eq 127 ] && ([ -z $HISTLASTENTRY ] || [ $HISTLASTENTRY -lt $number ]); then
        history -d $number
    else
        HISTLASTENTRY=$number
    fi
fi

링크작동 방식에 대한 설명 제공

관련 정보