거울 카니발 역사

거울 카니발 역사

git, docker 등 다양한 CLI 도구를 가르칩니다. 나는 두 개의 bash 터미널을 원합니다. 하나는 명령을 실행하고 출력을 가져오는 것이고, 다른 하나는 항상 명령 기록이 제공하는 내용을 미러링하는 것입니다.

이와 같이 bash에서 라이브 명령을 미러링하는 것이 가능합니까?

예:

T1: 비밀번호

T1: /집/나

T1:ls

T1: 문서 데스크탑 다운로드

T2:

pwd
ls

답변1

그럼 질문을 두 부분으로 나누어 보겠습니다.

먼저 bash 기록이 즉시 업데이트되는지 확인해야 합니다. 입력을 입력하고 Enter를 누를 때마다 명령이 작성되어야 합니다 .bash_history.

이는 다음과 같은 내용을 추가하여 달성할 수 있습니다 .bashrc.

PROMPT_COMMAND='history -a; history -c; history -r'

둘째, .bash_history지속적으로 파일을 읽고 있습니다. 이를 위해 tail두 번째 터미널에서 다음 명령을 사용할 수 있습니다.

tail -f .bash_history

-f매개변수는 tail이 파일을 열어두고 쓰여진 대로 새 줄을 인쇄한다는 것을 의미합니다.

답변2

명령을 인쇄해야 하는 경우앞으로bash DEBUG 트랩을 사용하여 실행하는 것은 매우 복잡하지만 한번 살펴보세요이 답변그리고긴 버전. 이것은 간단한 버전입니다. ~/traceme다음 내용으로 파일을 만듭니다 .

#!/bin/bash
# run preexec on each cmd before execute it
# see https://superuser.com/a/175802/458747
preexec(){ 
    echo "$1" >>~/myhistory
}
preexec_invoke_exec(){
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    # don't cause a preexec for $PROMPT_COMMAND
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return 
    local this_command=$(HISTTIMEFORMAT= history 1 | 
                                         sed -e "s/^[ ]*[0-9]*[ ]*//");
    preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG

그런 다음 T1 터미널에서 하세요 source ~/traceme. 그런 다음 T2 에서 하세요 tail -f ~/myhistory. T1에 입력한 각 명령은 실행되기 전에 T2의 파일 끝에 기록됩니다.

답변3

bash에 관해 질문할 때 이것이 실행 가능한 옵션인지 확실하지 않습니다. 그러나 zsh는 기록을 직접 기록합니다 .zsh_history. 이렇게 하면 터미널을 가질 수 있습니다 tail -f .zsh_history. 다른 zsh 터미널을 사용하여 실제 명령을 실행하십시오.

하지만 zsh를 사용하려는 경우에만 가능합니다.

관련 정보