기록 목록에서 명령을 제외하고 "라이브" 기록에 유지하려면 어떻게 해야 합니까?

기록 목록에서 명령을 제외하고 "라이브" 기록에 유지하려면 어떻게 해야 합니까?

또한, 여러분이 제공한 HISTIGNORE우승 옵션에 대한 훌륭한 팁 덕분에 저는 .bashrc의미 없는 부분 ll이나 df -k줄을 모두 생략하여 내 기록을 훨씬 더 명확하게 만들 수 있었습니다.

하지만 HISTIGNORE선택의 여지가 많다는 것도 알게 되었어요제한적인, 또한. 예를 들어, 다음과 같은 줄이 있다면(단순화)

HISTIGNORE='ll*:la*:cd*'

이러한 사항을 제외할 뿐만 아니라목록, 뿐만 아니라 귀하의"살아있는 역사"Cursor up/ 를 통해 액세스할 수 있는 휘발성 기록의 이름을 지정하고 싶기 때문입니다 Cursor down. 이것을 시도하십시오: 명령 기록을 순환하기 위해 해당 커서 키를 얼마나 오랫동안 사용하더라도 이제는 완전히 무시됩니다.

그러나 가끔 나는하다이 줄은 특히 다시 입력하고 싶지 않은 길고 복잡한 경로에 필요합니다. 반면에 나는 행을 원합니다.독점적인내 인생의 역사를 역사에 저장하는 대신목록자주 바뀌기 때문이죠.

이를 수행할 수 있는 방법이 있습니까?

또 다른 참고 사항으로, 어떤 이유로 "실시간" 기록과 기록 목록이 가끔 표시되는 것을 발견했습니다.다른많은(참조동일한 사용자 및 기록 명령을 사용하여 다른 결과를 얻는 이유는 무엇입니까?).

답변1

HISTIGNORE환경변수를 사용할 수 있습니다 .

기록 목록에 저장해야 하는 명령줄을 결정하는 데 사용되는 콜론으로 구분된 패턴 목록입니다. 예를 들어:

export HISTIGNORE="cd*:ls*"

그러면 기록의 모든 cd 및 ls 명령이 무시됩니다.

편집하다:

죄송합니다. 처음 읽었을 때 귀하의 질문을 충분히 고려하지 않았습니다. 그런데, 당신 말이 맞아요: HISTIGNORE이것은 매우 어려운 설정이며 bash_history는 이 변수에 나열된 모든 명령을 단순히 무시합니다(실행할 때 이를 무시합니다. 해당 명령이 이미 항목에 존재하는 경우 다음을 HISTFILE통해 찾을 수 있습니다). 역사적 역탐색.

마지막 질문에 먼저 답하자면, 서로 다른 단말기를 동시에 사용하는 경우 라이브 이력과 작성된 이력이 매우 다를 수 있습니다. 아래에 언급된 해결 방법을 시도해 볼 수 있습니다.

여러 터미널 창에서 bash 기록 유지

~/.bash_logout원하지 않는 기록 항목을 삭제하는 파일의 함수를 사용하는 솔루션을 상상할 수 있습니다 .

다음과 같은 작업이 원하는 작업을 수행해야 합니다.

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

답변2

3가지 가능한 옵션

시간이 부족해요 - 수정 환영합니다

0) 각 명령을 기록에 임시로 저장할 수 있도록 별칭을 설정합니다.

Alias ​​​​histsave='$HISTIGNORE && HISTIGNORESAVED=$HISTIGNORE;histignore=""; echo "모든 명령을 기록에 저장"' # 모든 기록 기록 저장

alias histignore='$HISTIGNORESAVED && (HISTIGNORE=$HISTIGNORESAVED; echo "저장하지 마세요: 기록에 $HISTIGNORES 명령";exit(0)) || echo "nutn이 있습니다."' # 일부 기록을 무시합니다.

1) 두 번째 bash 세션에서 복잡한 명령을 입력합니다.

별칭 설정: alias histig='HISTIGNORE=""'

터미널에서. 마우스 오른쪽 버튼을 클릭하고 수평/수직으로 분할하거나 같은 위치에서 새 세션을 시작합니다.

히스토그램

복잡한 명령을 입력하면 # 일반적으로 기록에 저장됩니다.

선택 과목:

History -w # 다른 터미널 세션에서 사용하기 위해 저장하려면 History -r을 사용하세요.

2) 복잡한 명령 저장일회성으로댓글을 활용하세요

주석으로 만들려면 명령 앞에 #을 붙입니다.

클릭: 홈, #, Enter. 이제 그것은 당신의 역사에 있습니다.

명령을 실행하려면 위쪽 화살표, 홈, 삭제(#), Enter...를 클릭하세요.

이점:

기록을 허용하면 일반적으로 HISTIGNORE 설정이 제외됩니다. grep History for '#'을 통해 특히 유용한 명령을 찾을 수 있습니다.

해결책:

명령을 기록에 저장하는 경우 "##"을 사용할 수 있습니다.

결점:

처음에 필요/예상대로 작동하지 않더라도 명령을 저장합니다.

이들 중 일부는 귀하에게 적합하지 않을 수 있습니다 == YMMV

관련 정보