すべての端末出力をファイルに保存

すべての端末出力をファイルに保存

コマンドを使用してすべての端末出力をファイルに保存する方法はありますか?

  • リダイレクトについて話すものではありません。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」コマンドが端末セッションごとに1回実行され、すべての内容が~/Terminal_typescripts/raw

必要に応じて、現在のセッションログを保存できます。後で (会議の終わりに)savelogまたは、入力savelog logname- 現在の生のログをこのフォルダにコピーし、~/Terminal_typescripts/manualこのフォルダに読み取ることができる.txtログを生成します。 (これを忘れた場合は、元のログファイルはまだそのフォルダにあるため、そのファイルを検索するだけです。)また、を入力して新しいログファイルのログ記録を開始できますstartnewlog

ジャンクログファイルが多いのですが、古いファイルは随時整理できるため大きな問題にはなりません。

(目安としてhttps://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131https://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を使用してください。

画面バッファ出力を含むファイルを保存する場所を選択できるファイルマネージャが開きます。

関連情報