コマンドですべての端末出力をファイルに保存する方法はありますか?
- 私はリダイレクトについて話していません
command > file.txt - 歴史
history > file.txtではなく、完全な端末テキストが必要です - ホットキーではありません!
何かのようなもの terminal_text > file.txt
xdotool、この種のブラックアートを残します)。
コマンドですべての端末出力をファイルに保存する方法はありますか?
command > file.txthistory > file.txtではなく、完全な端末テキストが必要です何かのようなもの terminal_text > file.txt
xdotool、この種のブラックアートを残します)。
回答:
を使用できます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入力するだけでセッションを開始できscriptます。後続のすべてのコマンドとその出力はすべてtypescript、現在のディレクトリにあるファイルに保存されます。次のscriptように開始するだけで、結果を別のファイルに保存することもできます。
script output.txt
screenセッションからログアウト(コンテンツの保存を停止)するには、単にを入力し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(--command)を実行する、その他の多くのオプションもあります。man scriptより多くのアイデアを得るためにチェックしてください。
私も同じ問題に直面し、いくつかの検索の後、この解決策を思い付きました:
これを.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」に記録されます。あなたがしたい場合は、現在のセッションのログを保存することができ、実際の後 (セッションの終わりに)これは「〜/ Terminal_typescripts /手動」に、現在の生ログをコピーしても読める作成します- 「SAVELOG」または「SAVELOG LOGNAME」と入力しこのフォルダの.txtログ。(忘れた場合、生のログファイルはフォルダに残ります。それらを見つける必要があります。)また、「startnewlog」と入力して、新しいログファイルへの記録を開始することもできます。
大量のジャンクログファイルがありますが、古いファイルはときどき消去できるため、大きな問題ではありません。
(に基づいhttps://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131、https://askubuntu.com/a/493326/473790)