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를 사용하려는 경우에만 가능합니다.