모든 터미널 출력을 파일에 저장

모든 터미널 출력을 파일에 저장

명령을 사용하여 모든 터미널 출력을 파일에 저장하는 방법이 있습니까?

  • 리디렉션에 대해 말하는 것이 아닙니다.command > file.txt
  • 기록이 아니라 history > file.txt전체 터미널 텍스트가 필요합니다.
  • 단축키를 사용하지 마세요!

그것은 마치terminal_text > file.txt

답변1

당신은 그것을 사용할 수 있습니다 script. 기본적으로 script해당 세션 동안 터미널에 인쇄된 모든 내용을 저장합니다 .

~에서man script:

script makes a typescript of everything printed on your terminal. 
It is useful for students who need a hardcopy record of an 
interactive session as proof of an assignment, as the typescript file 
can be printed out later with lpr(1).

터미널에 입력하기 script만 하면 세션을 시작할 수 있으며, 이후의 모든 명령과 해당 출력은 현재 디렉터리에 이름이 지정된 파일에 저장됩니다. 다음을 통해 결과를 다른 파일에 저장할 수도 있습니다 .scripttypescriptscript

script output.txt

세션에서 로그아웃하려면 script(컨텐츠 저장 중지) 을 입력하면 됩니다 exit.

예는 다음과 같습니다.

$ script output.txt
Script started, file is output.txt

$ ls
output.txt  testfile.txt  foo.txt

$ exit
exit
Script done, file is output.txt

이제 파일을 읽으면 다음과 같습니다.

$ cat output.txt

Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt  testfile.txt  foo.txt
$ exit
exit

Script done on Mon 20 Apr 2015 08:00:21 AM BDT

script-q프로그램 메시지를 표시/저장하지 않고 자동으로 실행 ( )하는 등의 옵션도 많이 있으며 , 세션 대신 특정 명령 ( ) --quiet을 실행할 수도 있으며 기타 다양한 옵션이 있습니다. 확인하다-c--commandman script더 많은 아이디어를 얻기 위해.

답변2

나는 같은 문제가 있었고 몇 가지 검색 끝에 다음 해결책을 찾았습니다.

다음에 추가하세요 .bash_aliases:

# Execute "script" command just once
smart_script(){
    # if there's no SCRIPT_LOG_FILE exported yet
    if [ -z "$SCRIPT_LOG_FILE" ]; then
        # make folder paths
        logdirparent=~/Terminal_typescripts
        logdirraw=raw/$(date +%F)
        logdir=$logdirparent/$logdirraw
        logfile=$logdir/$(date +%F_%T).$$.rawlog

        # if no folder exist - make one
        if [ ! -d $logdir ]; then
            mkdir -p $logdir
        fi

        export SCRIPT_LOG_FILE=$logfile
        export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

        # quiet output if no args are passed
        if [ ! -z "$1" ]; then
            script -f $logfile
        else
            script -f -q $logfile
        fi

        exit
    fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
    # make folder path
    manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
    # if no folder exists - make one
    if [ ! -d $manualdir ]; then
        mkdir -p $manualdir
    fi
    # make log name
    logname=${SCRIPT_LOG_FILE##*/}
    logname=${logname%.*}
    # add user logname if passed as argument
    if [ ! -z $1 ]; then
        logname=$logname'_'$1
    fi
    # make filepaths
    txtfile=$manualdir/$logname'.txt'
    rawfile=$manualdir/$logname'.rawlog'
    # make .rawlog readable and save it to .txt file
    cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
    # copy corresponding .rawfile
    cp $SCRIPT_LOG_FILE $rawfile
    printf 'Saved logs:\n    '$txtfile'\n    '$rawfile'\n'
}

그리고 .bashrc파일 끝에 다음을 추가합니다.

smart_script

이 작업이 완료되면 "script" 명령이 터미널 세션당 한 번씩 실행되어 모든 내용을 ~/Terminal_typescripts/raw.

필요한 경우 현재 세션 로그를 저장할 수 있습니다.나중에 (회의가 끝날 때)savelog또는 입력 savelog logname- 현재 원시 로그를 이 폴더에 복사 ~/Terminal_typescripts/manual하고 이 폴더에 읽을 수 있는 .txt 로그를 생성합니다. (이 작업을 잊어버린 경우 원본 로그 파일은 여전히 ​​해당 폴더에 있으므로 해당 파일을 찾기만 하면 됩니다.) 또한 를 입력하여 새 로그 파일에 대한 로깅을 시작할 수 있습니다 startnewlog.

정크 로그 파일이 많겠지만, 오래된 파일은 수시로 정리할 수 있으니 큰 문제는 되지 않습니다.

(기준으로https://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131,https://askubuntu.com/a/493326/473790)

답변3

다음 단계에서는 xrdb ~/.XressourcesX-resources 파일을 수정하고 실행한 후 새 터미널을 열어 변경 사항을 테스트합니다.

X텀

생쥐:잡다 CtrlLeft-mouse-click. 기본 옵션 메뉴가 나타납니다. "지금 모두 인쇄"를 선택하고 놓습니다. XTerm[date]터미널 내용이 포함된 파일이 홈 디렉터리에 생성되었습니다.

키보드 단축키: 작업을 에 바인딩하려면 파일 CtrlShifty에 추가하세요 ~/.Xresources.

XTerm*vt100.Translations: #override\
    Ctrl Shift <Key> y: print-immediate()

경로 설정: printFileImmediate덤프 파일의 접두사를 설정합니다. 덤프 파일의 경로를 지정하는 데 사용됩니다. 예를 들어, /home/user/dumps/xt[date]파일을 덤프하려면

XTerm*printFileImmediate: /home/user/dumps/xt

Urkesft

키보드 단축키: 포함하다 ~/.Xresources:

URxvt.print-pipe: cat > $HOME/scrollback

Ctrl+Print또는 에 바인딩합니다 Shift+Print.

기타 터미널

모든 사람이 그렇게 할 수 있는 것은 아닙니다. 매뉴얼 페이지나 메뉴 옵션을 확인하세요.

그 외에도 script터미널 독립적인 솔루션은 멀티플렉서를 사용하는 것입니다.

Tmux에서는 내부 명령을 실행하세요.

capture-pane -S - ; save-buffer scrollback-file

그러면 .tmux.conf다음 항목에 바인딩됩니다 Ctrl+bCtrl+s.

bind C-s capture-pane -S - \; save-buffer $HOME/scrollback

답변4

xfce4-terminal의 경우 accels.scm 파일을 사용하세요.

예를 들어 편집을 위해 열려면 Ctrl-Shift-s를 "제목 설정"에서 "콘텐츠 저장"으로 다시 할당합니다. ~/.config/xfce4/terminal/accels.scm

그런 다음 "save-contents"를 검색하고 다음과 같이 줄을 수정합니다.

(gtk_accel_path "<Actions>/terminal-window/save-contents" "<Primary><Shift>s")

    ; This will map 'save the entire scrollback buffer to a file' to the Left_Ctrl-Shift-s keystrokes.

; NOTE: commented lines start with a ;

xfce4-terminal의 메뉴 레이아웃은 위의 Mac 터미널 답변과 유사합니다. xfce4 터미널에서 "터미널, 콘텐츠 저장.."을 선택하거나 간단히 Left_Ctrl-Shift-s를 사용하세요.

화면 버퍼 출력이 포함된 파일을 저장할 위치를 선택할 수 있는 파일 관리자가 열립니다.

관련 정보